更好的是文本格式.最好的是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); } }
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" } ] }
我想这就是你所问的问题.