Json.NET(Newtonsoft.Json)-两个具有相同名称的“属性”?

我正在用C#编写.NET Framework 3.5。

我正在尝试将某些Json解析为JObject。

Json如下:

{

"TBox": {

"Name": "SmallBox",

"Length": 1,

"Width": 1,

"Height": 2 },

"TBox": {

"Name": "MedBox",

"Length": 5,

"Width": 10,

"Height": 10 },

"TBox": {

"Name": "LargeBox",

"Length": 20,

"Width": 20,

"Height": 10 }

}

当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“

TBox”解释为一个属性,并且该属性已被覆盖。

我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理。在事物的Delphi方面,“ TBox”被理解为所返回对象的 类型

。然后将内部属性(“名称”,“长度”,“宽度”,“高度”)理解为常规属性。

我可以序列化和反序列化具有Name,Length,Width和Height属性的自定义“ TBox”对象。没关系。

我想要做的是逐步浏览所有TBox部分,以提取以下三个Json字符串。

第一:

{

"Name": "SmallBox",

"Length": 1,

"Width": 1,

"Height": 2 }

第二:

{

"Name": "MedBox"

"Length": 5,

"Width": 10,

"Height": 10 }

第三:

{

"Name": "LargeBox"

"Length": 20,

"Width": 20,

"Height": 10 }

一旦有了这些字符串,就可以序列化和反序列化到我内心的内容。

我发现Newtonsoft.Json很好。如果可以避免的话,我真的不想和其他框架搞混。

任何帮助将不胜感激。

关于可以对服务器进行的更改,我的输入非常有限。

回答:

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

JsonTextReader jsonReader = new JsonTextReader(reader);

jsonReader.Read();

while(jsonReader.Read())

{

if(jsonReader.TokenType == JsonToken.StartObject)

{

JObject tbox = JObject.Load(jsonReader);

}

}

但是,请注意,RFC会说“对象内的名称应唯一”,因此,如果可以的话,建议您更改格式。

编辑:这是没有重复键的替代设计:

[

{

"TBox": {

"Width": 1,

"Length": 1,

"Name": "SmallBox",

"Height": 2

}

},

{

"TBox": {

"Width": 10,

"Length": 5,

"Name": "MedBox",

"Height": 10

}

},

{

"TBox": {

"Width": 20,

"Length": 20,

"Name": "LargeBox",

"Height": 10

}

}

]

以上是 Json.NET(Newtonsoft.Json)-两个具有相同名称的“属性”? 的全部内容, 来源链接: utcz.com/qa/429156.html

回到顶部