![](/img/trans.png)
[英]How to convert IDictionary<object,string> to ParseObject in Unity?
[英]How to convert the following JSON array into IDictionary<string, object>?
以下是我想转换为IDictionary
的序列化 JSON 数组
[
{
"8475": 25532
},
{
"243": 521
},
{
"3778": 15891
},
{
"3733": 15713
}
]
当我尝试使用
JsonConvert.DeserializeObject<IDictionary<string, object>>((string)jarray);
我收到一条错误消息:
无法将“jarray”(其实际类型为“Newtonsoft.Json.Linq.JArray”)转换为“string”
JSON 反序列化器只需要一个字符串。
如果您已经拥有JArray
,那么您所要做的就是将其转换为我猜的字典。
大致是这样的:
IDictionary<string,object> dict = jarray.ToDictionary(k=>((JObject)k).Properties().First().Name, v=> v.Values().First().Value<object>());
我认为可能有更好的方法将其转换为字典。 我会继续寻找。
JsonConvert.DeserializeObject<T>
方法采用 JSON字符串,即序列化对象。
您有一个反序列化的对象,因此您必须先对其进行序列化,这实际上毫无意义,因为您在JArray
对象中拥有所需的所有信息。 如果您只想从数组中获取对象作为键值对,您可以执行以下操作:
Dictionary<string, object> myDictionary = new Dictionary<string, object>();
foreach (JObject content in jarray.Children<JObject>())
{
foreach (JProperty prop in content.Properties())
{
myDictionary.Add(prop.Name, prop.Value);
}
}
要将JArray
转换为字符串,您需要为每个元素分配字典的键和值。 马里奥给出了一个非常准确的方法。 但是,只要您知道如何将每个项目转换为您想要的类型,还有一种更漂亮的方法。 下面的示例适用于Dictionary<string, string>
但可以应用于任何Value
类型。
//Dictionary<string, string>
var dict = jArray.First() //First() is only necessary if embedded in a json object
.Cast<JProperty>()
.ToDictionary(item => item.Name,
item => item.Value.ToString()); //can be modified for your desired type
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.