いくつかのオブジェクトをシリアル化するためにSOAPを使用している既存のリモーティングコードと下位互換性が必要なコードを書いています。.NET SoapFormatterで名前空間を制御する方法は?
私の難しさは、いくつかのオブジェクトを新しいアセンブリに移動しなければならなかったため、リモーティングが壊れていることです。
例えば、私はこのような.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は次のようになります。その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上のxmlnsをある程度制御:Personオブジェクト:
<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を手動で変更しない方がよいでしょう。
これを試してみます。私はこれを試みたと思ったが、私はしたかもしれない:[SoapType(NameSpace = "MY_NAMESPACE")、XmlNameSpaceの代わりに。ショットに値する、ありがとう。 –
XmlNameSpace = ...がキーです。ありがとう。 –