如何将 JSON 对象反序列化为字典,其值可以是单个字符串或字符串数组?

内森·盖德斯

我有一个 JSON 对象,这个 JSON 的一个属性是一个可以接收字符串值或字符串值数组的字典。

我的问题是:是否可以使用带有条件泛型参数的字典来处理这种情况,例如:Dictionary<string, string || string[]>

因为我需要反序列化一本字典中的值。

以下是 JSON 对象的示例,其中clientContent需要映射到这样的字典:

"clientConfDesc": {
   "clientContent": {
       "app.log.mail.port": "",
       "app.log.mail.protocol": "",
       "app.log.mail.receiver": "",
       "app.log.mail.server": "",
       "app.lookupDaemon.interval": "",
       "app.lookupDaemon.use": "yes",
       "app.remoteCall.ttl": "",
       "app.typeDef": ["5, , PD, PEDIDO"]
   }
}

注意:我知道这个例子JSON的对象是一个类,但是这个类的属性是可变的,也就是说,我无法映射它们,因为一个属性可能不存在或者可能会添加新的属性,这就是为什么我对待将这种情况作为字典,因为我想稍后在该类中删除或添加参数。

Yiyi You

字典值不能有两种类型,如果要将它们添加到1个字典中,则只能使用Dictionary<string, string[]>,并将字符串放入string[]DavidG所说的。或者您只能使用两个字典。这是一个使用演示Dictionary<string, string[]>

这是一个演示:

楷模:

public class Model1 
    {
        public Model2 clientConfDesc { get; set; }
    }
    public class Model2
    {
        public Dictionary<string, string[]> clientContent { get; set; }
       
    }

测试数据:

{
    "clientConfDesc": 
    {
        "clientContent": 
        {
            "app.log.mail.port": "",
            "app.log.mail.protocol": "",
            "app.log.mail.receiver": "",
            "app.log.mail.server": "",
            "app.lookupDaemon.interval": "",
            "app.lookupDaemon.use": "yes",
            "app.remoteCall.ttl": "",
            "app.typeDef": ["5", "PD", "PEDIDO"]
        }
    }
}

代码:

var mydata = JsonConvert.DeserializeObject<JObject>(json);
                var obj= JsonConvert.DeserializeObject<JObject>(mydata["clientConfDesc"]["clientContent"].ToString());
                var model = new Model1 { clientConfDesc = new Model2 { clientContent = new Dictionary<string, string[]>() } };
                foreach (var item in obj)
                {
                    var s=item.Value.ToString();
                    if (s.Contains("["))
                    {
                        model.clientConfDesc.clientContent[item.Key] = JsonConvert.DeserializeObject<string[]>(s);
                    }
                    else if (s != "")
                    {
                        model.clientConfDesc.clientContent[item.Key] = new string[] { s };
                    }
                    else {
                        model.clientConfDesc.clientContent[item.Key] = new string[] { };
                    }
                }

结果: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将JSON单个字符串反序列化为数组

如何将json字符串反序列化为对象

将一属性对象的JSON数组反序列化为字符串集合

将JSON字符串或字符串数组反序列化为Vec

如何将JSON字符串反序列化为不同的复杂类类型?

如何将包含编码 HTML 的 json 字符串反序列化为 JObject?

如何将逗号分隔的JSON字符串反序列化为单独字符串的向量?

将JSON字符串反序列化为Class

如何将java.lang.String的空白JSON字符串值反序列化为null?

如何将 json 字符串值序列化为 Newtonsoft Json 中的类

将 JSON 反序列化为包含格式化为字符串的 Point 值的多态对象的 .NET 集合

使用JSON.NET将JSON数组反序列化为字符串数组

是否可以使用 System.Text.Json 将 json 字符串反序列化为动态对象?

将Json Schema反序列化为Json字符串或对象

将JSON数组反序列化为字符串数组

防止Json.NET将字符串数组反序列化为键值对数组

将JSON反序列化为C#对象以将嵌套数组显示为网格中的字符串

将Json字符串反序列化为对象Java

将json字符串反序列化为对象c#.net

将json字符串反序列化为python中的对象

将json字符串反序列化为python中的对象

将JSON对象属性反序列化为字符串

使用Jackson将JSON字符串或对象反序列化为String字段

将Json字符串反序列化为多种对象类型

将json字符串反序列化为.NET对象列表

将字符串反序列化为JSON对象时出错

System.Text.Json-将嵌套对象反序列化为字符串

将json twitter字符串反序列化为对象

当Newtonsoft可以是单个字符串或行话时,反序列化JSON属性