【发布时间】:2015-04-05 15:46:28
【问题描述】:
我正在尝试将以下 JSON 属性转换为对象。字符串数组是一种混合类型:它的元素可以是字符串或字符串数组。 (虽然字符串数组只是偶尔出现在记录中。)
我将booster 属性设为List<String>,这很好,但是最后包含数组的几行会导致解析失败。任何想法我可以如何处理这种情况?
"booster": [
"land",
"marketing",
"common",
"common",
"common",
"common",
"common",
"common",
"common",
"common",
"common",
"common",
"uncommon",
"uncommon",
"uncommon",
[
"rare",
"mythic rare"
]
]
using(var db = new MTGFlexContext()){
JObject AllData = JsonConvert.DeserializeObject<JObject>(File.ReadAllText(path));
List<String> SetCodes = db.Sets.Select(x => x.Code).ToList();
foreach (var set in AllData)
{
try
{
Set convert = JsonConvert.DeserializeObject<Set>(set.Value.ToString()) as Set;
if (!SetCodes.Contains(set.Key))
{
convert.Name = set.Key;
foreach (var c in convert.Cards)
{
db.Cards.Add(c);
db.SaveChanges();
}
db.Sets.Add(convert);
db.SaveChanges();
}
}
}
}
完整的 json 为 40mb http://mtgjson.com/
【问题讨论】:
-
您对对象格式有多少控制权?如果数组只出现在最后,你能把它分解成包含对象的一个单独的属性吗?