Использование JavaScript для десериализации ссылок в графе сложных объектов из SignalR / Json.NET

Я использую SignalR для возврата графа сложных объектов в мой клиент JavaScript. Этот граф объектов имеет несколько ссылок на один и тот же объект, поэтому JSON, который возвращает SignalR / Json.NET, выглядит примерно так:

{
    "$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"
    }]
}

(Конечно, намного сложнее в реальной жизни, но вы поняли.)

И, конечно, когда Json.NET сериализуется по ссылке, а не по значению, он присваивает каждому объекту значение $ id (например,"$id":"57"и затем позже просто ссылается на этот объект, используя этот идентификатор (например,"$ref":"57", И, насколько я могу судить, когда Json.NET (использующий C # /. NET) десериализует эти ссылки, он помещает соответствующие экземпляры объекта в соответствующие места.

Пока все хорошо - но как лучше всего десериализовать этив JavaScript, так что я на самом деле получаю соответствующие экземпляры объекта в соответствующих местах, а не просто странные поля $ ref?

Вероятно, я мог бы написать свой собственный универсальный десериализатор, но я должен представить, что кто-то другой уже решил эту проблему, и я просто не буду изобретать какие-либо колеса. К сожалению, моих навыков работы с Google явно недостаточно, чтобы найти это решение :-).

Редактировать:

Я вижу, что естьIETF проект предложения о том, как такого рода вещи должны работать. И похоже, что всегда полезный Дуглас Крокфорд имеетпредварительная реализация этого К сожалению, в предложении IETF используется другая схема, чем в Json.NET.

Ответы на вопрос(1)

Ваш ответ на вопрос