序列化/反序列化平面结构中的嵌套对象

安东

我敢肯定,在某个地方,我的问题有一个简单的答案,但我无法找到答案。我遇到的问题如下,我有代码结构:

class Field
{   
    List<Block> Blocks {get;set;}

    public static Field CreateField()
    {
        var A = new Block {Connector = new Connector()}
        var B = new Block {Connector = new Connector()}

        A.Connector.ConnectedTo.Add(B);
        B.Connector.ConnectedTo.Add(A);

        var field = new Field();
        field.Blocks = new List {A, B};

        return field;
    }
}

class Block
{
    Connector Connector {get;set;}
}

class Connector
{
    List<Block> ConnectedTo {get;set;}
}

比使用json.net的序列化命令:

JsonConvert.SerializeObject(Field.CreateField(), Formatting.Indented, new JsonSerializerSettings {PreserveReferencesHandling = PreserveReferencesHandling.Objects});

并且输出结果符合预期:

{
    "$id": "1",
    "Blocks": [
        {
            "$id": "2",
            "Connector": {
                "$id": "3",
                "ConnectedTo": [
                    {
                        "$id": "4",
                        "Connector":{
                            "$id": "5",
                            "ConnectedTo": [
                                {
                                    "$ref": "2"
                                }
                            ]
                        }
                    }
                ]
            }
        }
    ]
}

有什么方法可以产生序列化结果,如下所示:

{
    "$id": "1",
    "Blocks": [
        {
            "$id": "2",
            "Connector": {
                "$id": "3",
                "ConnectedTo": [
                    {
                        "$ref": "4"
                    }
                ]
            }
        },
        {
            "$id": "4",
            "Connector":{
                "$id": "5",
                "ConnectedTo": [
                    {
                        "$ref": "2"
                    }
                ]
            }
        }
    ]
}

谢谢。

布莱恩·罗杰斯(Brian Rogers)

号在你的第二个例子,$ref : 4指向一个$id发生的JSON。Json.Net将无法反序列化它-当它出现时,$ref它希望能够将其解决为$id已经看到的。

我建议不要要求用户直接修改JSON,除非他们在技术上精通。正如我在SO上回答许多与JSON相关的问题所看到的那样,如果手动编辑格式,很容易弄乱格式-缺少引号或逗号,大括号不匹配,语法无效,都可以将其命名。当有人将其拧紧时,您将怎么办?我认为一个更好的选择是制作一个可以抽象地处理您的结构的工具。该工具可以反序列化原始JSON,允许进行某些更改,然后将其重新序列化为新结构。这样,用户将不需要了解有关底层JSON格式的任何信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用XStream序列化/反序列化类型层次结构中的对象?

来自分类Dev

反序列化嵌套在数组中的对象

来自分类Dev

从平面XML反序列化的嵌套类

来自分类Dev

使用PHP中的类型将嵌套对象序列化/反序列化为JSON

来自分类Dev

Json .Net将平面对象序列化为复杂的对象(在序列化/反序列化时更改对象结构)

来自分类Dev

树结构的Jackson序列化/反序列化

来自分类Dev

序列化和反序列化嵌套类

来自分类Dev

在DRF中序列化嵌套对象

来自分类Dev

序列化javascript对象并反序列化

来自分类Dev

序列化和反序列化HttpRequestMessage对象

来自分类Dev

序列化和反序列化对象集合

来自分类Dev

如何使用.net支持对象序列化和反序列化以更改类结构?

来自分类Dev

如何在 Typescript 中序列化/反序列化复杂对象,例如反序列化对象与序列化对象的类型相同

来自分类Dev

Spray-json反序列化嵌套对象

来自分类Dev

Gson 使用嵌套对象反序列化 LinkedHashmap

来自分类Dev

嵌套对象的 Java Jackson 反序列化

来自分类Dev

Symfony中的序列化和反序列化

来自分类Dev

序列化和反序列化中的类层次结构

来自分类Dev

从API反序列化嵌套的json

来自分类Dev

SQLAlchemyAutoSchema嵌套反序列化

来自分类Dev

反序列化OData嵌套响应

来自分类Dev

反序列化嵌套JSON

来自分类Dev

难以反序列化嵌套JSON

来自分类Dev

在再次反序列化之前,替换序列化为字符串的对象中可能嵌套的字符串

来自分类Dev

在Jquery中序列化数组和对象,在Ajax之后在PHP中反序列化?

来自分类Dev

反序列化Java数据结构中的文本

来自分类Dev

在C#中反序列化嵌套的JSON数组

来自分类Dev

反序列化Java对象中的通用对象

来自分类Dev

Swift中对象的自动JSON序列化和反序列化

Related 相关文章

  1. 1

    如何使用XStream序列化/反序列化类型层次结构中的对象?

  2. 2

    反序列化嵌套在数组中的对象

  3. 3

    从平面XML反序列化的嵌套类

  4. 4

    使用PHP中的类型将嵌套对象序列化/反序列化为JSON

  5. 5

    Json .Net将平面对象序列化为复杂的对象(在序列化/反序列化时更改对象结构)

  6. 6

    树结构的Jackson序列化/反序列化

  7. 7

    序列化和反序列化嵌套类

  8. 8

    在DRF中序列化嵌套对象

  9. 9

    序列化javascript对象并反序列化

  10. 10

    序列化和反序列化HttpRequestMessage对象

  11. 11

    序列化和反序列化对象集合

  12. 12

    如何使用.net支持对象序列化和反序列化以更改类结构?

  13. 13

    如何在 Typescript 中序列化/反序列化复杂对象,例如反序列化对象与序列化对象的类型相同

  14. 14

    Spray-json反序列化嵌套对象

  15. 15

    Gson 使用嵌套对象反序列化 LinkedHashmap

  16. 16

    嵌套对象的 Java Jackson 反序列化

  17. 17

    Symfony中的序列化和反序列化

  18. 18

    序列化和反序列化中的类层次结构

  19. 19

    从API反序列化嵌套的json

  20. 20

    SQLAlchemyAutoSchema嵌套反序列化

  21. 21

    反序列化OData嵌套响应

  22. 22

    反序列化嵌套JSON

  23. 23

    难以反序列化嵌套JSON

  24. 24

    在再次反序列化之前,替换序列化为字符串的对象中可能嵌套的字符串

  25. 25

    在Jquery中序列化数组和对象,在Ajax之后在PHP中反序列化?

  26. 26

    反序列化Java数据结构中的文本

  27. 27

    在C#中反序列化嵌套的JSON数组

  28. 28

    反序列化Java对象中的通用对象

  29. 29

    Swift中对象的自动JSON序列化和反序列化

热门标签

归档