我需要一些帮助。 Google和Json.net的文档都没有帮助。
这些是我的对象。
[JsonObject(IsReference = true)]
public class Member
{
public int Id { get; set; }
public string Naam { get; set; }
public virtual List<Dog> Dogs { get; set; }
}
[JsonObject(IsReference = true)]
public class Dog
{
public int Id { get; set; }
public string Naam { get; set; }
public virtual List<Member> members { get; set; }
}
一只狗可以有多个成员,而一个成员可以有多只狗,所以我为这两个对象创建了我的集合。
List<Member> members = new List<Member> { new Member { Id = 1, Naam = "James" } };
List<Dog> dogs = new List<Dog> { new Dog { Id = 2, Naam = "Fifi", members = new List<Member> { members[0] } } };
members[0].Dogs = new List<Dog> { dogs[0] };
在这一点上 members[0].Dogs
和 dogs[0]
有相同的引用。
我想把列表保存到JSON中,但保留引用。 我试过这样做。
string jsonMembers = JsonConvert.SerializeObject(members, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
string jsonDogs = JsonConvert.SerializeObject(dogs, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
和后退
members = JsonConvert.DeserializeObject<List<Member>>(jsonMembers, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
dogs = JsonConvert.DeserializeObject<List<Dog>>(jsonDogs, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
如果我检查平等的 members[0].Dogs
和 dogs[0]
同样,两者有不同的引用。 如何使两者反序列化后仍有相同的引用?
你是分别序列化deserializing dogs和成员,并且有两个JSON字符串,它们之间没有关系。
定义单个结构,其中包含狗和成员,并一次性serializedeserialize所有对象,deserialized结构应该有每个对象的单个实例。
public class Storage
{
public List<Dog> Dogs { get; set; }
public List<Member> Members { get; set; }
}
var json = JsonConvert.SerializeObject(storage, Formatting.Indented, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
var storage2 = JsonConvert.DeserializeObject<Storage>(json, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });