Json.NET (Newtonsoft.Json) - 两个同名的 'properties'?

标签 json properties duplicates json.net

我正在使用 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”被理解为被返回对象的类型。然后将内部属性(“名称”、“长度”、“宽度”、“高度”)理解为常规属性。

我可以序列化和反序列化具有名称、长度、宽度和高度属性的自定义“TBox”对象。没关系。

我想要做的是以提取以下三个 Json 字符串的方式遍历所有 TBox 部分。

第一的:
{
    "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) - 两个同名的 'properties'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877526/

相关文章:

java - 如何将 json 响应字段更改为 java 中的用户定义字段?

C# 在设计器中显示可浏览的子属性

python - Pandas - 删除重复行,但另一列中具有最高值的行除外

sql - PostgreSQL 中使用多个条件的复杂重复数据删除

json - 从 firebase 检索特定数据

java - 多对一关系的无限递归错误

java - Android Java 检索 JSON 值并将其作为对象存储在列表中

MVVM 绑定(bind)密码

delphi - 为什么 Delphi 不保存自定义组件的嵌套属性?

MySql:如何从包含重复字段的行的表中更新单行出现?