相关疑难解决方法(0)

使用JavaScript从SignalR/Json.NET反序列化复杂对象图中的引用

我正在使用SignalR将复杂的对象图返回给我的JavaScript客户端.这个对象图对同一个对象有多个引用,因此SignalR/Json.NET返回的JSON看起来很像这样:

{
    "$id": "57",
    "Name": "_default",
    "User": {
        "$id": "58",
        "UserTag": "ken",
        "Sessions": [{
            "$id": "59",
            "SessionId": "0ca7474e-273c-4eb2-a0c1-1eba2f1a711c",
            "User": {
                "$ref": "58"
            },
            "Room": {
                "$ref": "57"
            }
        }],
    },

    "Sessions": [{
        "$ref": "59"
    }]
}
Run Code Online (Sandbox Code Playgroud)

(当然,在现实生活中要复杂得多,但你明白了.)

当然,当Json.NET通过引用而不是按值进行序列化时,它会为每个对象分配一个$ id值(例如,"$id":"57"然后稍后只使用该id引用该对象(例如,"$ref":"57".).告诉我,当Json.NET(使用C#/ .NET)反序列化这些引用时,它会将对象的适当实例放在适当的位置.

到目前为止一切都很好 - 但是在JavaScript中对这些进行反序列化的最佳方法是什么,以便我在适当的位置获得适当的对象实例,而不仅仅是奇怪的$ ref字段?

我可能会编写自己的通用解串器,但我必须想象其他人已经解决了这个问题,而且我很快就不会重新发明任何轮子.不幸的是,我的Google技能显然不足以找到解决方案:-).

编辑:

我看到有一个IETF草案提案,关于这类事情应该如何运作.看起来总是有用的道格拉斯克罗克福德有一个暂时的实施.不幸的是,IETF提议使用了与Json.NET使用不同的模式.

javascript json json.net deserialization signalr

13
推荐指数
1
解决办法
2183
查看次数

从JSON对象解析循环引用

如果我有一个来自json.net的序列化JSON,如下所示:

User:{id:1,{Foo{id:1,prop:1}},
FooList{$ref: "1",Foo{id:2,prop:13}}
Run Code Online (Sandbox Code Playgroud)

我想让淘汰输出超过FooList,但我不知道如何继续,因为$ ref的东西可以抛出东西.

我认为解决方案是通过不使用以某种方式强制所有Foos在FooList中呈现:

PreserveReferencesHandling = PreserveReferencesHandling.Objects
Run Code Online (Sandbox Code Playgroud)

但这似乎很浪费..

javascript jquery json.net knockout.js

13
推荐指数
3
解决办法
2万
查看次数