如何在.NET中反序列化{“ result”:[true,[1,2]]}

时间:2019-06-07 05:58:38

标签: c# json json.net

我试图反序列化此JSON API结果,但是类型有问题。 在文档中,该文档写道这是一个Python Tuple,其中包含另一个Tuple,即tuple(status, tuple(Imp, Vmp)),但对于Newtonsoft.json中的JsonConvert.DeserializeObject,则是一个列表。有人知道使用[true,[1,2]]进行反序列化的JsonConvert.DeserializeObject的正确类型是什么吗?

我尝试过类似Tuple<bool, Tuple<int,int>>List<(bool, List<int>)>(bool, List<int>)之类的类型以及其他一些组合,但都没有成功。

这是JSON:

{  
   "result":[  
      true,
      [  
         1,
         2
      ]
   ]
}

2 个答案:

答案 0 :(得分:3)

由于result是不同类型的数组,因此请定义以下类:

public class Result
{
    [JsonProperty(PropertyName = "result")]
    public object[] Results { get; set; }
}

然后,您可以遍历Results[]。我用您的样品进行了测试,

  • Results[0]将是System.Boolean
  • Results[1]将是Newtonsoft.Json.Linq.JArray

答案 1 :(得分:1)

这是一个奇怪的布局,但是JSON是众所周知的。

不幸的是,我在C#中可以最接近POCO的地方是:

public struct Record
{
    public object[] result;
}

这种工作方式很丑陋。您不能直接使用results数组,最终不得不使用反射来弄清是什么,嵌套数组的结果为JArray(使用Newtonsoft.Json)。

如果确定,可以结合使用JsonArrayAttribute和自定义JsonConverter<T>实现。只要格式是一致的,就可以正常工作,否则会有些棘手。如果您愿意,我可以给您一些代码。