我需要帮助以使用json.net在运行时自定义反序列化。
就我而言,我只知道在运行时接受json模型属性名称,因此我无法使用标准JsonPropertyAttribute
来设置名称。
方法DefaultContractResolver.ResolvePropertyName对于我来说很适合重写,但是它没有有关模型目标类型的信息。这是我现在面临的主要问题。
在我的解决方案中,我具有带有键名的自定义属性。我将它们设置为“动态”属性,以便在运行时将它们映射到已知值。
模型示例:
public class MyDeserializationModel
{
public string known_property { get; set; }
[MyAttribute(Constants.CustomFields.DynamicProperty1)]
public string DynamicProperty1 { get; set; }
[MyAttribute(Constants.CustomFields.DynamicProperty2)]
public string DynamicProperty2 { get; set; }
}
因此,对于我而言,获取有关目标反序列化类型的信息以获取属性值以生成要映射的名称对于我来说是理想的。
我在KeyValuePair:TypePropertyName|MyPropertyName
内初始化时创建了一个CustomFieldContractResolver
的字典,这使我有些不安,但是在每次设置SerializationSettings
的请求上定制ContractResolver
看起来都很烦人响应类型。毕竟,我必须为可能在单个json响应中的多个模型生成唯一的属性名称。
我可以通过某种方式获取有关目标类型和json属性名称的信息来覆盖反序列化上的属性映射吗?