2015-10-23 3 views
0

Использование Microsoft WebAPI 2 (который использует третью партию Json.NET библиотеку), скажем, я возвращаюсь следующий people массив:

var p1 = new Person("Alice"); 
var p2 = new Person("Bob"); 
p1.Sibling = p2; 
p2.Sibling = p1; 
var people = new[] { p1, p2 }; 

Чтобы избежать циклических ссылок, то Json.NET выводит следующий JSON:

[ 
    { 
     "$id":"1", 
     "Name":"Alice", 
     "Sibling":{ 
     "$id":"2", 
     "Name":"Bob", 
     "Sibling":{ 
      "$ref":"1" 
     } 
     } 
    }, 
    { 
     "$ref":"2" 
    } 
] 

Javascript's JSON.parse() метод ничего не знает об этом синтаксисе. Я просмотрел спецификацию JSON, и я вижу использование ключевого слова $ ref в указателях, но я не вижу, чтобы они использовали ключевое слово $ id. Это что-то причудливое в Json.NET? Или это что-то в спецификации JSON, которая просто не поддерживается широко?

+0

является JSON JSON. это просто ключи: значения, насколько это необходимо. то, что представляют эти ключи/значения, соответствует коду, который создает структуру данных, которая в конечном итоге кодируется в json. Сам json не мог заботиться, если ключ - это «id», «id» или «foobar». то, что у вас есть, совершенно справедливо json. массив, содержащий два объекта, содержащий дополнительные под-данные. –

ответ

2

Нет, $id и $ref не является частью стандарта JSON (вы заметите, что он нигде не упоминается ни на одном JSON.org); это соглашение, используемое Json.Net для тегирования объектов и ссылки на них в целях сохранения ссылок на десериализацию. Другие библиотеки JSON могут или не могут следовать одному и тому же соглашению. См. Preserving Object References в документации Json.Net для получения дополнительной информации.

NB: Существуют методы javascript, которые могут обрабатывать разрешение $id/$ref нотации от Json.Net. Вы можете быть заинтересованы в следующих примерах:

Смежные вопросы