首页 > 解决方案 > 如何将 ByteSerialize 属性/长度分配为变量

问题描述

我正在创建具有不同类型和长度的模型,这些模型用作对 API 的请求/响应。

    [ByteSerialize(1)]
    public string ByteLength { get; set; }

    [ByteSerialize()]
    public string Byte { get; set; }

我想首先获取来自 API 的 ByteLength,然后将其传递给 [ByteSerialize(?)]

标签: c#serialization

解决方案


属性是惰性的——没有神奇的方法可以让事情自动发生。此外,属性通常仅被视为 IL 中的元数据,因此:它们的参数必须表示为常量,而不是运行时值。显然,如果您只将属性创建为对象,而不是元数据,那么情况就会发生变化:您的示例显示了元数据。

要做你想做的事,你可以手动做,即有一些方法on ByteSerializeAttribute,当你的代码检测到(通过PropertyInfo)属性存在时,使用类似的东西:

var value = property.GetValue(obj);
attrib.SomeMethod(obj, value); // or whatever you need

推荐阅读