2010-02-17 39 views
1

我想弄清楚.NET序列化的東西,並遇到問題。我做了一個簡單的程序來測試它,並使用屬性卡住了。下面的代碼:應用SoapIgnore屬性不會影響序列化結果

[Serializable] 
public class SampleClass 
{ 
    [SoapIgnore] 
    public Guid InstanceId 
    { 
     get; 
     set; 
    } 
} 

class Program 
{ 
    static void Main() 
    { 

     SampleClass cl = new SampleClass { InstanceId = Guid.NewGuid() }; 
     SoapFormatter fm = new SoapFormatter(); 
     using (FileStream stream = new FileStream(string.Format("C:\\Temp\\{0}.inv", Guid.NewGuid().ToString().Replace("-", "")), FileMode.Create)) 
     { 
      fm.Serialize(stream, cl); 
     } 
    } 
} 

的問題是,雖然序列化完成INSTANCEID也是不可忽視的。我得到.inv文件是這樣的:

<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:SampleClass id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/TestConsoleApp/TestConsoleApp%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull"> 
<_x003C_InstanceId_x003E_k__BackingField> 
<_a>769807168</_a> 
<_b>27055</_b> 
<_c>16408</_c> 
<_d>141</_d> 
<_e>210</_e> 
<_f>171</_f> 
<_g>30</_g> 
<_h>252</_h> 
<_i>196</_i> 
<_j>246</_j> 
<_k>159</_k> 
</_x003C_InstanceId_x003E_k__BackingField> 
</a1:SampleClass> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

,我可以從文檔InstanceID屬性理解,因爲SoapIgnore屬性應用於它不應該被序列化。我錯過了什麼嗎?

回答

0

這些屬性用於標準Web Service XML序列化。 SoapFormatter用於Remoting序列化,不用於Web Service序列化。

爲了讓您成爲示例工作,您應該爲SOAP編碼的消息部分提供類型映射。

[Serializable] 
public class SampleClass 
{ 

    [SoapIgnore] 
    public Guid InstanceId 
    { 
     get; 
     set; 
    } 
} 

class Program 
{ 
    static void Main() 
    { 

     SampleClass cl = new SampleClass { InstanceId = Guid.NewGuid() }; 
     XmlTypeMapping xtm = new SoapReflectionImporter().ImportTypeMapping(typeof(SampleClass)); 
     XmlSerializer xs = new XmlSerializer(xtm); 

     using (FileStream stream = new FileStream(string.Format("C:\\Temp\\{0}.inv", Guid.NewGuid().ToString().Replace("-", "")), FileMode.Create)) 
     { 
      xs.Serialize(stream, cl); 
     } 
    } 
} 
相關問題