C#解析没有名字的Json文件

时间:2012-07-06 00:00:15

标签: c# json silverlight parsing

因此,部分Json文件是这样的:

{
"number":"23",
"name":{
    "":"LJames"   <----------- look at this line
},
"Gender":"Male",
...

我正在尝试解析这个问题,只要名称字段存在(没有名称与值匹配),DataContractJsonSerializer将无法读取它。

任何人都有使用这种Json文件的经验请分享一些想法,谢谢。

3 个答案:

答案 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)

CC++有一个名为jansson的库。我对C#并不熟悉,但也没有理由不在那里工作。但是,如果你想自己创建一个解析器,我会告诉你,写一个正则表达式作为你的delim: 例如 String delim = "{} :\n\t"; 您的解析器基本上是:如果行上有:,则检索值为keyvalue对,如果{继续解析,直到找到}。 我怀疑你在写这样的解析器时会遇到什么麻烦。