This may not be your case, but you may be able to use cycle.js
, with it you can point to a reference object, not object in sim.
This library can also be useful if you want to make a JSON.stringify
on a circular reference object.
var pessoas = [
//pessoas[0]: "$ref": "$[0]"
{
"ID": 1,
"Nome": "Teste 01",
"Conjugue": { "$ref": "$[1]" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }, { "$ref": "$[4]" } ],
"Irmaos": null
},
//pessoas[1]: "$ref": "$[1]"
{
"ID": 2,
"Nome": "Teste 02",
"Conjugue": { "$ref": "$[0]" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }, { "$ref": "$[4]" } ],
"Irmaos": null
},
//pessoas[2]: "$ref": "$[2]"
{
"ID": 3,
"Nome": "Teste 03",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[3]" }, { "$ref": "$[4]" }]
},
//pessoas[3]: "$ref": "$[3]"
{
"ID": 4,
"Nome": "Teste 04",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[2]" }, { "$ref": "$[4]" }]
},
//pessoas[4]: "$ref": "$[4]"
{
"ID": 5,
"Nome": "Teste 05",
"Conjugue": null,
"Pai": { "$ref": "$[0]" },
"Mae": { "$ref": "$[1]" },
"Filhos": null,
"Irmaos": [{ "$ref": "$[2]" }, { "$ref": "$[3]" }]
}
];
var _pessoas = JSON.retrocycle(pessoas);
console.log(_pessoas);
console.log(JSON.stringify(JSON.decycle(_pessoas)));
<script src="https://cdn.rawgit.com/douglascrockford/JSON-js/master/cycle.js"></script>
Someserver-sidelibraries,suchas Newtonsoft.Json for C#
use an approach similar to solve for circular reference problems, however in this case the $ref
does not point to the Path of the object, but to the object with the property $id
with the same value.
In any case, you can adapt the Douglas Crockfords script to work the same way.
In this case json would be something similar to:
using System;
using Newtonsoft.Json;
public class Pessoa
{
public int ID { get; set; }
public string Nome { get; set; }
public Pessoa Conjugue { get; set; }
public Pessoa Pai { get; set; }
public Pessoa Mae { get; set; }
public Pessoa[] Filhos { get; set; }
public Pessoa[] Irmaos { get; set; }
}
public class Program
{
public static void Main()
{
var pessoas = new Pessoa[5];
pessoas[0] = new Pessoa() { ID= 1, Nome = "Teste 01" };
pessoas[1] = new Pessoa() { ID= 2, Nome = "Teste 02" };
pessoas[2] = new Pessoa() { ID= 3, Nome = "Teste 03" };
pessoas[3] = new Pessoa() { ID= 4, Nome = "Teste 04" };
pessoas[4] = new Pessoa() { ID= 5, Nome = "Teste 05" };
pessoas[0].Conjugue = pessoas[1];
pessoas[0].Filhos = new Pessoa[] { pessoas[2], pessoas[3], pessoas[4] };
pessoas[1].Conjugue = pessoas[0];
pessoas[1].Filhos = new Pessoa[] { pessoas[2], pessoas[3], pessoas[4] };
pessoas[2].Pai = pessoas[0];
pessoas[2].Mae = pessoas[1];
pessoas[2].Irmaos = new Pessoa[] { pessoas[3], pessoas[4] };
pessoas[3].Pai = pessoas[0];
pessoas[3].Mae = pessoas[1];
pessoas[3].Irmaos = new Pessoa[] { pessoas[2], pessoas[4] };
pessoas[4].Pai = pessoas[0];
pessoas[4].Mae = pessoas[1];
pessoas[4].Irmaos = new Pessoa[] { pessoas[2], pessoas[3] };
var json = JsonConvert.SerializeObject(pessoas, Formatting.Indented, new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
});
Console.WriteLine(json);
/*
[
//pessoas[0]: "$ref": "1"
{
"ID": 1,
"Nome": "Teste 01",
"Conjugue": { "$ref": "2" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "3" }, { "$ref": "4" }, { "$ref": "5" } ],
"Irmaos": null
},
//pessoas[1]: "$ref": "2"
{
"ID": 2,
"Nome": "Teste 02",
"Conjugue": { "$ref": "1" },
"Pai": null,
"Mae": null,
"Filhos": [{ "$ref": "3" }, { "$ref": "4" }, { "$ref": "5" } ],
"Irmaos": null
},
//pessoas[2]: "$ref": "3"
{
"ID": 3,
"Nome": "Teste 03",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "4" }, { "$ref": "5" }]
},
//pessoas[3]: "$ref": "4"
{
"ID": 4,
"Nome": "Teste 04",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "3" }, { "$ref": "5" }]
},
//pessoas[4]: "$ref": "5"
{
"ID": 5,
"Nome": "Teste 05",
"Conjugue": null,
"Pai": { "$ref": "1" },
"Mae": { "$ref": "2" },
"Filhos": null,
"Irmaos": [{ "$ref": "3" }, { "$ref": "4" }]
}
];
*/
}
}