JSON.NET obsługuje okrągły serializacji odniesienia zachowując wszystkie odwołania z następującymi ustawieniami:Czy istnieje biblioteka JSON JavaScript (po stronie klienta), która dobrze integruje się z JSON.NET (po stronie serwera) i obsługuje funkcję "zachowaj odwołania"?
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
settings.PreserveReferencesHandling = PreserveReferencesHandling.All;
który pozwala następujący kod do uruchomienia bez błędów, właściwie szeregowania i deserializacji obiektu z jego samoodniesienia nienaruszonym.
public class SelfReferencingClass
{
public string Name;
public SelfReferencingClass Self;
public SelfReferencingClass() {Name="Default"; Self=this;}
}
SelfReferencingClass s = new SelfReferencingClass();
string jsondata = JsonConvert.SerializeObject(d, settings);
s = JsonConvert.DeserializeObject<SelfReferencingClass>(jsondata, settings);
jsondata ciąg wygląda następująco:
{"$id":"1","Name":"Default","Self":{"$ref":"1"}}
Problemem jest ... jak to jest cechą Json.NET przydatna w ogóle bez odpowiedniej stronie klienta JavaScript biblioteki, które można interpretować te referencje , a także wspierać kodowanie takich samych odniesień?
Która biblioteka po stronie klienta (np. JSON.stringify) obsługuje tę funkcję/kodowanie przy użyciu pól "$ id" i "$ ref"? Jeśli nie istnieje, czy istnieje znany sposób dodania obsługi do istniejącej biblioteki?
Samo dodawanie wsparcia byłoby dość prostym dwudrożnym procesem. Najpierw deserializuj cały łańcuch, a podczas tworzenia każdego obiektu dodaj go do słownika, używając jako klucza wartości "$ id". Gdy napotkasz odniesienia (obiekt składający się tylko z właściwości "$ ref") możesz dodać go do listy obiektów + nazw pól, które możesz cofnąć, aby zastąpić każde napotkane odniesienie, szukając jego klucza w ostatecznym słowniku utworzonych obiektów .
Szukałem wszędzie rozwiązania. Wydaje się, że istnieje coś takiego jak "dojo" (http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/), które również ma takie wsparcie, ale jest także serwerowe. po stronie i nie wydaje się zawierać "$" w polu id, więc nie jest to nawet zgodne ze sposobem, w jaki JSON.NET obsługuje kodowanie odniesienia. – Triynko
Serializator JSON 3 http://bestiejs.github.io/json3/ również nie obsługuje cyklicznego odniesienia i spowoduje błąd. Komentarz do kodu to "// Struktury cykliczne nie mogą być serializowane przez' JSON.stringify'. ' – Triynko
to pytanie zawiera odpowiedź: http://stackoverflow.com/questions/13782052/using-javascript-to-deserialize-references-in-a-complex-object-graph-from-signal –