首页 > 解决方案 > 在 JSON.Net 中反序列化期间使用类型解析属性名称

问题描述

我需要帮助来使用 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|MyPropertyNameon initialize的字典来创建一些灵魂,但是在每个请求上进行自定义以设置等待响应类型CustomFieldContractResolver,这看起来很烦人。毕竟我必须为可能在单个 json 响应中的几个模型生成唯一的属性名称。SerializationSettingsContractResolver

我可以通过以某种方式获取有关目标类型和 json 属性名称的信息来覆盖反序列化的属性映射吗?

标签: c#jsonjson.net

解决方案


推荐阅读