Цитата(4ybaka @ 1.9.2007, 22:29 ) | | те это все делается автоматически?а как тогда указать,нужно ли сохранять сам объект или ссылку на него?или это тоже автоматически все делается? |
Нипонял. Что значит сохранять САМ обьект или ССЫЛКУ на него? оО
Цитата(4ybaka @ 1.9.2007, 22:29 ) | | а в BinarySerializer такого нет? |
Я для примера взял. Бинари просто не показывает все свои внутренности. Кстати, имел ввиду SOAP - сериализацию, а не хмл (за него не знаю - влом проверять)
Вот пример:
| Код | static class Program { public static void Main() { using (FileStream stream = File.OpenWrite("test.xml")) { SoapFormatter formatter = new SoapFormatter(); A a = new A(5); formatter.Serialize(stream, a); } } } [Serializable] class A { public B[] bArray; public A(int i) { bArray = new B[i]; for (int j = 0; j < i; j++) { bArray[j] = new B(this); } } } [Serializable] class B { public A _parentField; public B(A parent) { _parentField = parent; } }
|
И вот то что получил на выходе:
| Код | <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <a1:A id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <bArray href="#ref-3"/> </a1:A> <SOAP-ENC:Array id="ref-3" SOAP-ENC:arrayType="a1:B[5]" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <item href="#ref-4"/> <item href="#ref-5"/> <item href="#ref-6"/> <item href="#ref-7"/> <item href="#ref-8"/> </SOAP-ENC:Array> <a1:B id="ref-4" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <_parentField href="#ref-1"/> </a1:B> <a1:B id="ref-5" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <_parentField href="#ref-1"/> </a1:B> <a1:B id="ref-6" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <_parentField href="#ref-1"/> </a1:B> <a1:B id="ref-7" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <_parentField href="#ref-1"/> </a1:B> <a1:B id="ref-8" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/ConsoleApplication1/ConsoleApplication1%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> <_parentField href="#ref-1"/> </a1:B> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
|
В общем-то в памяти тоже существуют ссылки и сами обьекты. Во-время сериализации среда использует понятие "ссылки" даже тут |