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