【问题标题】:Newtonsoft c# convert all JArray to object arrayNewtonsoft c#将所有JArray转换为对象数组
【发布时间】: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跨度>
  • 如果您有一个没有预定义架构的JObjectJArray,您可以使用JsonHelper.ToObject()this answer 将其转换为vanilla .Net 对象(字典、列表或原语) How do I use JSON.NET to deserialize into nested/recursive Dictionary and List?.
  • @dbc 感谢这个链接,我认为这会有所帮助

标签: c# json.net


【解决方案1】:

为什么不使用 JObject 而不是 object[] 这样可以解决子数组中的问题

var value = JObject.Parse(json);
var c = value["data"]["c"];

变量 c 将是 JArray 类型

var objectArray = c.ToObject<List<object>>().ToArray();

如果您真的想将结果作为 object[] 来实现,那么 objectArray 变量就是答案。

【讨论】:

  • 如果 c 是 Object 或 object[] 那就太好了
  • @narcos 刚刚更新了我的答案,看看是否有帮助
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 2016-07-22
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多