将JSON反序列化为字典

3
我想将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"
}

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

编辑以添加更多内容 - Paul L
2个回答

0

这个可行吗?

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

属性将被忽略,如果我没记错的话。 - Athari
是的,你说得对。看起来这是一种让这些属性被包含的方法 - https://dev59.com/cGUp5IYBdhLWcg3w-Lez#14894945 - peaceoutside

0

您的选项:

  1. 在一个字典上使用JsonExtensionDataAttribute,可以获取所有未找到属性的数据,使用OnDeserialized回调将字典转换为所需的格式:

    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上找到许多示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接