일부 개체를 직렬화하기 위해 SOAP를 사용하는 기존 원격 코드와 하위 호환이 가능한 코드를 작성 중입니다..NET SoapFormatter에서 네임 스페이스를 제어하는 방법?
어려운 점은 리모콘이 손상되어 일부 개체를 새 어셈블리로 옮겨야한다는 것입니다.
이Person p=new Person();
string [email protected]"c:\myfile.soap";
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write))
{
System.Runtime.Serialization.Formatters.Soap.SoapFormatter
f = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
f.Serialize(fs, p);
fs.Close();
}
결과 XML은 다음과 같습니다 :
예를 들어, 내가이 같은 .NET SoapFormatter를 사용하여 객체 직렬화하는 XML에서
<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:Person id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/Serialization/dotneat_net.Serialization%2C%20Version%3D0.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<FirstName id="ref-3">Joe</FirstName>
<LastName id="ref-4">Doe</LastName>
<_Address id="ref-5">dotneat.net Street, Zaragoza, Spain</_Address>
<_ZIPCode id="ref-6">50007</_ZIPCode>
</a1:Person>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
를, 내가 가지고 싶습니다 a1 : Person 객체의 xmlns에 대한 일부 제어 :
<a1:Person id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/Serialization/dotneat_net.Serialization%2C%20Version%3D0.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
이유는 새 Person 객체가 원래 개체와 동일한 어셈블리에 있지 않습니다. 따라서 나중에 (더 오래된 프로젝트에서) 비 직렬화가 발생하면 잘못된 어셈블리로 인해 실패합니다.
xmlns의 텍스트를 어떻게 제어 할 수 있습니까? 직렬화되는 클래스에서 [SoapType Namespace = "xxx"] 특성을 사용하는 것과 같은 몇 가지 방법을 시도했습니다. 불운.
XML을 수동으로 수정하지 않는 것이 좋습니다.
나는 이것을 시도 할 것이다. 나는 이것을 시도했다고 생각했지만, 나는 할 수도있다 : XmlNameSpace 대신 [SoapType (NameSpace = "MY_NAMESPACE"). 그만한 가치가있어, 고마워. –
XmlNameSpace = ... 키입니다. 감사. –