处理JSON.net中的引用循环

懒目标

我希望将List<Item>项目集合(序列化为JSON。

这些项目具有一个集合,Connection集合提供有关从一个Item到另一个的连接的信息Item并且由于连接对象具有对项目的引用,因此使其成为无限循环。

我的问题是,当我第二次序列化对象时,是否有一种方法可以跳过连接集合的序列化。

我已经尝试了诸如继承JsonConverter和编写自定义WriteJson()方法之类的事情但是从那里我不知道是否应该写出数组。

我也尝试过使用自定义的ContractResolver,但效果不佳。


班级

public class Item
{
    private static int _lastID = 0;

    public Item()
    {
        ID = ++_lastID;
        Connections = new List<Connection>();
    }


    public int ID { get; set; }

    public string Name { get; set; }

    public string Prop1 { get; set; }

    public string Prop2 { get; set; }

    public List<Connection> Connections { get; set; }

}



public class Connection
{
    private Connection(ConnectionType type, Item source, Item target)
    {
        if (type == ConnectionType.None)
            throw new ArgumentException();
        if (source == null)
            throw new ArgumentNullException("source");
        if (target == null)
            throw new ArgumentNullException("target");

        Type = type;
        Source = source;
        Target = target;
    }


    public ConnectionType Type { get; set; }

    public Item Source { get; set; }

    public Item Target { get; set; }


    public static void Connect(ConnectionType type, Item source, Item target)
    {
        var conn = new Connection(type, source, target);
        source.Connections.Add(conn);
        target.Connections.Add(conn);
    }
}


想要的结果:

[
    {
        "id": 1,
        "name": "Item #1",
        "prop1": "val1",
        "prop2": "val2",
        "connections": {
            "type": "ConnType",
            "source": {
                "id": 1,
                "name": "Item #1",
                "prop1": "val1",
                "prop2": "val2"
                // no connections array
            },
            "target": {
                "id": 2,
                "name": "Item #2",
                "prop1": "val1",
                "prop2": "val2"
                // no connections array
            }
        }
    },
    {
        "id": 2,
        "name": "Item #2",
        "prop1": "val1",
        "prop2": "val2",
        "connections": {
            "type": "ConnType",
            "source": {
                "id": 1,
                "name": "Item #1",
                "prop1": "val1",
                "prop2": "val2"
                // no connections array
            },
            "target": {
                "id": 2,
                "name": "Item #2",
                "prop1": "val1",
                "prop2": "val2"
                // no connections array
            }
        }
    }
]



编辑:

C#

var settings = new JsonSerializerSettings
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver(),
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        Formatting = Formatting.Indented
    };
settings.Converters.Add(new StringEnumConverter());
var json = JsonConvert.SerializeObject(collection, settings);
瓦西夫·侯赛因

而不是声明的类型的SourceTarget作为Item,你可能会推出一个新的类,比如说ItemClass,which'll包含类的所有领域Item,除Connections财产。

public class ItemClass
{
    public int ID { get; set; }

    public string Name { get; set; }

    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

public class Connection
{
    // ...

    public ConnectionType Type { get; set; }

    public ItemClass Source { get; set; }

    public ItemClass Target { get; set; }

    // ...
}

现在,您将产生相应的填充新ItemClass类型实例的开销

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

json中的循环引用

来自分类Dev

很好地处理JSON中的循环引用的解析框架

来自分类Dev

如何使用Newtonsoft Json.NET处理JSON文档中的对象引用?

来自分类Dev

Json端点循环引用处理程序HTTP 500错误

来自分类Dev

在Swift中处理JSON

来自分类Dev

在Swift中处理JSON

来自分类Dev

Unity Json.net bson自引用循环

来自分类Dev

即使使用 JsonSerializerSettings,Json.net 循环引用异常

来自分类Dev

在Yesod中处理JSON帖子

来自分类Dev

在json中处理空间url

来自分类Dev

在Jquery中处理Json响应

来自分类Dev

JSON序列化程序中的循环引用异常

来自分类Dev

如何在 Symfony 中使用循环引用处理程序序列化为 json?

来自分类Dev

如何处理Json.Net解析中的错误

来自分类Dev

Json.Net 中的自定义属性处理

来自分类Dev

JSON中引用属性顺序的Json.Net问题

来自分类Dev

如何从Json.NET序列化的JSON恢复循环引用(例如“ $ id”)?

来自分类Dev

在jquery ajax中处理json响应

来自分类Dev

处理json中的可选字段

来自分类Dev

在Rails中从Android处理JSON数组

来自分类Dev

在CouchDB中处理超大的JSON文档

来自分类Dev

填充SVG元素,处理JSON中的数据

来自分类Dev

在处理中访问嵌套的JSON数组

来自分类Dev

在Rails中处理JSON平面文件

来自分类Dev

使用jq处理数组中的数组的JSON

来自分类Dev

在Spark中处理json文件的快速方法

来自分类Dev

如何动态处理javascript中的json数据?

来自分类Dev

如何处理JSON中的特殊字符

来自分类Dev

在python中处理大型JSON数据