【发布时间】:2020-08-26 09:18:44
【问题描述】:
如何将 json 字符串中的所有 JArray 转换为 c# 中的 object[]
现在,如果我想将带有JArray 的简单json 转换为object[]
如果我的 json 像这样我使用
json = "{data:{'a':1008,'b':111111,'c':['data1','data2']}}";
object Data = JsonConvert.DeserializeObject<object>(json,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
Newtonsoft.Json.Linq.JArray x = (Newtonsoft.Json.Linq.JArray)Data["c"];
object[] xdata = x.ToObject<object[]>();
这就是我需要的工作,它将 Json 字符串中的所有 JArray 转换为子代或子代中的 object[]
所以如果我有这样的字符串
json = "{data:{'a':1008,'b':111111,'c':['e':['f':['ccc','bbb'],'RRR'],'data2']}}";
如果我想将其转换为普通对象数组,我需要循环 "f" JArray 的子对象并检查每个子对象是否是 JArray,如果它正在转换
但如果孩子有 jArray 孩子...等,这是经典方法
我觉得 JsonConverter 有一个很好的解决方案,但我对此并不了解
public class MyObjectConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
}
etc....
}
或者在没有 JsonConverter 的情况下使用另一种解决方案
为什么我需要一些想法,因为我可能会使用传统方法将所有 JArray 转换为 Object[] 进行 10 次或更多循环
【问题讨论】:
-
只需将其反序列化为标准的 poco 具体类,互联网和 stackoverflow.com 上有很多(数千个示例)
-
@MichaelRandall 我不能使用它,因为
f像随机数据这样的数据不是静态的,有些时候有孩子有JArray,有些时候不是有些时候孩子的孩子有两个JArray跨度> -
如果您有一个没有预定义架构的
JObject或JArray,您可以使用JsonHelper.ToObject()从this answer 将其转换为vanilla .Net 对象(字典、列表或原语) How do I use JSON.NET to deserialize into nested/recursive Dictionary and List?. -
@dbc 感谢这个链接,我认为这会有所帮助