![](/img/trans.png)
[英]Windows phone 8 C#: How to parse JSON Array of Array of objects
[英]How to parse json objects inside json array in c#?
我有一個json
文件,它具有以下任一格式:
{
"MyOrders": [
{
"order": "my order1",
"url": "tt"
}
]
}
示例 2:
{
"MyOrders": [
[
{
"order": "my order 1",
"url": "ddfdfd"
},
{
"order": "order 2",
"url": "asdfwe"
}
],
[
{
"order": "my order 3",
"url": "ertrt"
},
{
"order": "my order 4",
"url": "werwe"
}
]
]
}
我有以下代碼:
InputItems root = JsonConvert.DeserializeObject<InputItems>(myJsonText);
我有以下課程:
public class InputItems
{
[JsonProperty("MyOrders")]
public List<Order> objects { get; set; }
}
public class Order
{
[JsonProperty("order")]
public string order{ get; set; }
[JsonProperty("url")]
public string url { get; set; }
}
但它僅適用於第一種情況。 如何改進它以涵蓋第二種示例格式?
提前致謝。
我寫了一個轉換器,應該可以幫助你:
public class SingleArrayOrNestedConverter<TItemType> : JsonConverter<List<TItemType>>
{
public override List<TItemType> ReadJson(JsonReader reader, Type objectType, List<TItemType> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
// Read the object as JSON
var token = JToken.ReadFrom(reader);
if (token is JObject) // it's just a lone object, so wrap it in a list and return it
{
return new List<TItemType>() { token.ToObject<TItemType>(serializer) };
}
else if (token is JArray arrayOfObjects) // it's an array of objects, so let's loop through
{
var result = new List<TItemType>();
foreach (var item in arrayOfObjects)
{
if (item is JObject) // the nested item is an object, so let's add it to the list
{
result.Add(item.ToObject<TItemType>(serializer));
}
else if (item is JArray nestedArrayOfObjects) // the nested item is an array, so let's loop through it
{
foreach (var nestedItem in nestedArrayOfObjects)
{
// this will throw an exception if nestedItem doesn't represent an object
result.Add(nestedItem.ToObject<TItemType>(serializer));
}
}
}
return result;
}
return null;
}
// we can't use this code for serializing so make sure JSON.NET doesn't try
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, List<TItemType> value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
這將適用於以下 JSON 示例。
示例 1:
{
"MyOrders": [{
"order": "my order1",
"url": "tt"
}
]
}
示例 2:
{
"MyOrders": [
[{
"order": "my order1",
"url": "tt"
}
]]
}
示例 3:
{
"MyOrders": {
"order": "my order1",
"url": "tt"
}
}
示例 4:
{
"MyOrders": [
[{
"order": "my order1",
"url": "tt"
}
], {
"order": "my order1",
"url": "tt"
}
]
}
要將其應用於您的代碼,您需要使用JsonConverterAttribute
:
[JsonConverter(typeof(SingleArrayOrNestedConverter<Order>))]
看起來像這樣:
public class InputItems
{
[JsonProperty("MyOrders")]
[JsonConverter(typeof(SingleArrayOrNestedConverter<Order>))]
public List<Order> objects { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.