Newtonsoft JSON - 不同的JSON结构,对象与数组[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Newtonsoft JSON - 不同的JSON结构,对象与数组[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有这个JSON结构:
[
{
"key1": "value",
"key2": "value",
"key3": "TYPE_ONE",
"extraData": {
"key4": "value",
"key5": "value",
"key6": {
"key7": {
"key8": "value",
"key9": "value",
"key10": "value"
}
}
}
},
{
"key1": "value",
"key2": "value",
"key3": "TYPE_TWO",
"extraData": {
"key4": "value",
"key5": "value",
"key6": {
"key7": [
{
"key8": "value",
"key9": "value",
"key10": "value"
},
{
"key8": "value1",
"key9": "value1",
"key10": "value1"
},
{
"key8": "value2",
"key9": "value2",
"key10": "value2"
}
]
}
}
}
]
我正试图用using Newtonsoft.Json;
中的C#
对它进行反序列化。 JSON有两种结构。
1. CASE - >当“key3”:“TYPE_ONE”时,则key7为对象。
2. CASE - >当“key3”:“TYPE_TWO”时,则key7为数组。
如果在课堂上
public class key6
{
public key7 key7Item { get; set; }
}
key7Item被设置为对象仅当我从响应中得到“key3”的所有对象时才有效:“TYPE_ONE” 如果我将key7Item设置为List,则只有当响应中的所有项都是“key3”时才有效:“TYPE_TWO”。
我可以配置Newtonsoft解析器解析数组,如果它有数组或对象,如果它有对象?
答案
简短回答 - 如果可以避免,请不要这样做。通过为阵列提供不同的密钥名称,您可以节省大量的复杂性。
答案很长,你可以做到,但这很痛苦。如果有人知道如何处理没有重新序列化生成的j对象(即保持json与反序列化对象并排),我很想知道:
private static readonly string Json = "[
{
"key1": "value",
"key2": "value",
"key3": "TYPE_ONE",
"extraData": {
"key4": "value",
"key5": "value",
"key6": {
"key7": {
"key8": "value",
"key9": "value",
"key10": "value"
}
}
}
},
{
"key1": "value",
"key2": "value",
"key3": "TYPE_TWO",
"extraData": {
"key4": "value",
"key5": "value",
"key6": {
"key7": [
{
"key8": "value",
"key9": "value",
"key10": "value"
},
{
"key8": "value1",
"key9": "value1",
"key10": "value1"
},
{
"key8": "value2",
"key9": "value2",
"key10": "value2"
}
]
}
}
}
]";
private static void Deserialize()
{
var switchers = JsonConvert.DeserializeObject<JObject[]>(Json);
var deserializedType1List = new List<TargetClass<Key6Type1>>();
var deserializedType2List = new List<TargetClass<Key6Type2>>();
foreach (var switcher in switchers)
{
if (switcher["key3"].Value<string>() == "TYPE_ONE")
{
deserializedType1List.Add(JsonConvert.DeserializeObject<TargetClass<Key6Type1>>(JsonConvert.SerializeObject(switcher)));
}
else
{
deserializedType2List.Add(JsonConvert.DeserializeObject<TargetClass<Key6Type2>>(JsonConvert.SerializeObject(switcher)));
}
}
//Do something with the objects...
}
private class TargetClass<TKey6Type>
{
public string key1 { get; set; }
public string key2 { get; set; }
public string key3 { get; set; }
public ExtraData<TKey6Type> extraData { get; set; }
}
private class ExtraData<TKey6Type>
{
public string key4 { get; set; }
public string key5 { get; set; }
public TKey6Type key6 { get; set; }
}
private class Key6Type2
{
public Key7[] key7 { get; set; }
}
private class Key6Type1
{
public Key7 key7 { get; set; }
}
private class Key7
{
public string key8 { get; set; }
public string key9 { get; set; }
public string key10 { get; set; }
}
以上是关于Newtonsoft JSON - 不同的JSON结构,对象与数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Newtonsoft JSON - 不同的JSON结构,对象与数组[重复]