因此,部分Json文件是这样的:
{
"number":"23",
"name":{
"":"LJames" <----------- look at this line
},
"Gender":"Male",
...
我正在尝试解析这个问题,只要名称字段存在(没有名称与值匹配),DataContractJsonSerializer
将无法读取它。
任何人都有使用这种Json文件的经验请分享一些想法,谢谢。
答案 0 :(得分:2)
您可以尝试使用Json.NET来解析它。它通常比DataContractJsonSerializer好很多,并且具有更好的性能。我不确定这是否能解决你的问题。
如果你考虑一下,结果对象在C#中会是什么样子?从像这样的JSON字符串......
{
"name" : { "first" : "James" }
}
...我希望映射到具有“name”属性的C#对象,并且“name”属性将引用具有“first”属性的对象(这将是一个字符串,值为“詹姆斯“)。
因此,如果您删除键值“first”,解析器将如何知道如何映射(或如何命名)属性?在C#中没有无名属性。
我建议您重新格式化您的Json文件(如果可能),如下所示:
{
"number":"23",
"name": "LJames",
"Gender":"Male",
...
答案 1 :(得分:2)
使用正则表达式将此空引号替换为您选择的变量名称,例如:
json = Regex.Replace(json , "\"\":", "\"playerName\":", RegexOptions.IgnorePatternWhitespace);
答案 2 :(得分:0)
C
和C++
有一个名为jansson的库。我对C#
并不熟悉,但也没有理由不在那里工作。但是,如果你想自己创建一个解析器,我会告诉你,写一个正则表达式作为你的delim:
例如
String delim = "{} :\n\t"
;
您的解析器基本上是:如果行上有:
,则检索值为key
:value
对,如果{
继续解析,直到找到}
。
我怀疑你在写这样的解析器时会遇到什么麻烦。