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