Я уверен, что где-то есть простой ответ на мой вопрос, но я не мог его исправить. Проблема я столкнулся в следующем, у меня есть структура кода:Сериализация/десериализация вложенных объектов в плоской структуре
class Field
{
List<Block> Blocks {get;set;}
public static Field CreateField()
{
var A = new Block {Connector = new Connector()}
var B = new Block {Connector = new Connector()}
A.Connector.ConnectedTo.Add(B);
B.Connector.ConnectedTo.Add(A);
var field = new Field();
field.Blocks = new List {A, B};
return field;
}
}
class Block
{
Connector Connector {get;set;}
}
class Connector
{
List<Block> ConnectedTo {get;set;}
}
чем команды сериализации с помощью json.net:
JsonConvert.SerializeObject(Field.CreateField(), Formatting.Indented, new JsonSerializerSettings {PreserveReferencesHandling = PreserveReferencesHandling.Objects});
и выходной результат, как и ожидалось:
{
"$id": "1",
"Blocks": [
{
"$id": "2",
"Connector": {
"$id": "3",
"ConnectedTo": [
{
"$id": "4",
"Connector":{
"$id": "5",
"ConnectedTo": [
{
"$ref": "2"
}
]
}
}
]
}
}
]
}
Есть любой способ получить сериализацию следующим образом:
{
"$id": "1",
"Blocks": [
{
"$id": "2",
"Connector": {
"$id": "3",
"ConnectedTo": [
{
"$ref": "4"
}
]
}
},
{
"$id": "4",
"Connector":{
"$id": "5",
"ConnectedTo": [
{
"$ref": "2"
}
]
}
}
]
}
Спасибо.
Зачем вам это нужно сплющивать? Посмотрите, как вы можете сериализовать данные с круговыми ссылками здесь: http://johnnycode.com/2012/04/10/serializing-circular-references-with-json-net-and-entity-framework/ – Kvam
Kvam, thanks для ответа. Сначала мне нужно, чтобы это было дружелюбным к человеку (пользователь должен иметь возможность открыть json-файл и изменить его), сейчас практически невозможно, где и как это происходит. Тогда выходной файл с 10-20 блоками выглядит практически невозможным для изменения с помощью json-пути, особенно когда нам нужно что-то заменить (процесс обновления версии). – Anton