Del*_*ino 5 c# json json.net deserialization
我刚下载了一个包含所有当前MTG集/卡的巨大 JSON文件,我希望将其全部反序列化.
我已经将每个set的大部分反序列化了,但是当我尝试反序列化booster每个Set中的对象时,我遇到了障碍:
从上面两张图片中可以看出,每个booster对象都有一个字符串列表,但是对于某些booster对象,还有一个更多字符串的附加数组.反序列化一个专门的字符串数组不是问题.当我遇到那里是一个字符串数组的情况下,我的问题出现之内的booster需要反序列化对象.
目前我设置的用于处理此反序列化的属性是:
public IEnumerable<string> booster { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是当我遇到其中有另一个数组的情况时,booster我会抛出一个异常,Newtonsoft.Json抱怨它不知道如何处理反序列化.
那么,我的问题就变成了:如何反序列化字符串数组中包含的字符串数组?在C#代码中,对象需要用什么来处理那种反序列化?
您可以反序列化每个项目,string[]甚至认为该项目不是集合。因此,提供一个自定义序列化器;
public class StringArrayConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray array = JArray.Load(reader);
for (int i = 0; i < array.Count; i++)
{
//If item is just a string, convert it string collection
if (array[i].Type == JTokenType.String)
{
array[i] = JToken.FromObject(new List<string> {array[i].ToObject<string>()});
}
}
return array.ToObject<List<string[]>>();
}
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(List<string[]>));
}
}
public class JsonObject
{
[JsonConverter(typeof(StringArrayConverter))]
public List<string[]> booster { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后反序列化json;
var data = JsonConvert.DeserializeObject<JsonObject>(json);
Run Code Online (Sandbox Code Playgroud)
最后,您可以像我下面提供的那样反序列化 json;
{
"booster": [
"1",
"2",
["3","4"]
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |