【问题标题】:Deserialize JSON to Dictionary [duplicate]将 JSON 反序列化为字典 [重复]
【发布时间】:2014-10-22 16:07:16
【问题描述】:

我想将一个 Json 反序列化为以下类

public class Config
{
    public String Name { get; set; }
    public SSOType Type { get; set; }
    public Dictionary<String, String> Configuration { get; set; }
}

因此,两个属性将“照常”反序列化,其余的将被推入字典。

JsonConvert.DeserializeObject<Config>(filetext);

这会将数据推送到属性名称和类型,但字典保持为空...

我猜json应该是这样的

{
    "name":"something",
    "type":"something",
    "configuration":{
        "thing1":"value",
        "thing2":"value",
        "thing3":"value"
            }
}

但我希望 json 像

{
    "name":"something",
    "type":"something",
    "thing1":"value",
    "thing2":"value",
    "thing3":"value"
}

如何调整反序列化使其正常工作?

【问题讨论】:

  • 编辑添加更多内容

标签: c# json json.net


【解决方案1】:

这行得通吗?

public class Config : Dictionary<string, string>
{
    public String Name { get; set; }
    public SSOType Type { get; set; }
}

【讨论】:

【解决方案2】:

您的选择:

  1. JsonExtensionDataAttribute 将获取所有未找到属性的数据的字典,OnDesrialized 回调将字典转换为您需要的格式:

    public class Config
    {
        public String Name { get; set; }
    
        [JsonIgnore]
        public Dictionary<string, string> Configuation { get; set; }
    
        [JsonExtensionData]
        private Dictionary<string, JToken> _configuration;
    
        [OnDeserialized]
        private void Deserialized (StreamingContext context)
        {
            Configuation = _configuration.ToDictionary(i => i.Key, i => (string)i.Value);
        }
    }
    
  2. 自定义JsonConverter,它将读取 JSON DOM 并将其转换为您的类。您可以在 StackOverflow 上找到许多示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2019-10-05
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多