c# – 序列化循环引用对象的最佳方法是什么?
发布时间:2020-12-15 08:31:59 所属栏目:百科 来源:网络整理
导读:更好的是文本格式.最好的是json,有一些标准指针.二进制也不错.记住,在过去,肥皂已经成为了这一点.你的建议是什么? 解决方法 没有任何问题 binary: [Serializable]public class CircularTest{ public CircularTest[] Children { get; set; }}class Program{
更好的是文本格式.最好的是json,有一些标准指针.二进制也不错.记住,在过去,肥皂已经成为了这一点.你的建议是什么?
解决方法
没有任何问题
binary:
[Serializable] public class CircularTest { public CircularTest[] Children { get; set; } } class Program { static void Main() { var circularTest = new CircularTest(); circularTest.Children = new[] { circularTest }; var formatter = new BinaryFormatter(); using (var stream = File.Create("serialized.bin")) { formatter.Serialize(stream,circularTest); } using (var stream = File.OpenRead("serialized.bin")) { circularTest = (CircularTest)formatter.Deserialize(stream); } } } 一个DataContractSerializer也可以处理循环引用,你只需要使用一个特殊的构造函数并指出它,它将吐出XML: public class CircularTest { public CircularTest[] Children { get; set; } } class Program { static void Main() { var circularTest = new CircularTest(); circularTest.Children = new[] { circularTest }; var serializer = new DataContractSerializer( circularTest.GetType(),null,100,false,true,// <!-- that's the important bit and indicates circular references null ); serializer.WriteObject(Console.OpenStandardOutput(),circularTest); } } 最新版本的Json.NET支持循环引用以及JSON: public class CircularTest { public CircularTest[] Children { get; set; } } class Program { static void Main() { var circularTest = new CircularTest(); circularTest.Children = new[] { circularTest }; var settings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects }; var json = JsonConvert.SerializeObject(circularTest,Formatting.Indented,settings); Console.WriteLine(json); } } 生产: { "$id": "1","Children": [ { "$ref": "1" } ] } 我想这就是你所问的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |