我试图反序列化此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
]
]
}
答案 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>
实现。只要格式是一致的,就可以正常工作,否则会有些棘手。如果您愿意,我可以给您一些代码。