加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Json.NET(Newtonsoft.Json) – 两个同名的“属性”?

发布时间:2020-12-16 18:41:22 所属栏目:百科 来源:网络整理
导读:我正在使用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
我正在使用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","Height": 2 }

第二:

{
    "Name": "MedBox"
    "Length": 5,"Height": 10 }

第三:

{
    "Name": "LargeBox"
    "Length": 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,"Name": "SmallBox","Height": 2
        }
    },{
        "TBox": {
            "Width": 10,"Name": "MedBox","Height": 10
        }
    },{
        "TBox": {
            "Width": 20,"Name": "LargeBox","Height": 10
        }
    }
]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读