2011-05-19 85 views
2

我有一個類,它需要標準地址屬性並存儲它們。 State屬性的類型爲USStateCodesType。以下是用於存儲屬性的代碼示例:對象不會序列化所有屬性到XML

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://SP/Items/Schemas")] 
public partial class BusinessAddress 
{ 

    private string address1Field; 

    private string address2Field; 

    private string cityField; 

    private USStateCodesType stateField; 

    private bool stateFieldSpecified; 

    private string zipField; 

    /// <remarks/> 
    public string Address1 
    { 
     get 
     { 
      return this.address1Field; 
     } 
     set 
     { 
      this.address1Field = value; 
     } 
    } 

USStateCodesType包含一個包含字符串鍵和值的私有字典。默認構造函數加載字典並被任何重載調用。只有一個公共財產,國家。它編碼如下:

public string State 
    { 
     get 
     { 
      return iDict[_key]; 
     } 
     set 
     { 
      if (iDict.ContainsValue(value)) 
      { 
       foreach (string k in iDict.Keys) 
        if (iDict[k] == value) 
         _key = k; 
      } 
      else 
       _key = string.Empty;      
     } 
    } 

USStatesCodeType上方的屬性與前面的示例相同。

問題是,當我嘗試將對象序列化爲XML字符串,我得到的是這樣的:

<BusinessAddress> 
    <Address1>12345 AnyStreet</Address1> 
    <City>Los Angles</City> 
    <Zip>90210</Zip> 
    </BusinessAddress> 

在我的數據庫,我存儲CA.我想把XML輸出

<BusinessAddress> 
    <Address1>12345 AnyStreet</Address1> 
    <City>Los Angles</City> 
    <State>California</State> 
    <Zip>90210</Zip> 
    </BusinessAddress> 

我在序列化之前檢查對象的屬性,State屬性顯示的值爲California。

我在做什麼錯?

回答

5

我會假設你創建的BusinessAddress一個實例,並指定不同的屬性:

BusinessAddress myBusinessAddress = new BusinessAddress(); 
myBusinessAddress.Address1 = "12345 AnyStreet"; 
myBusinessAddress.City = "Los Angeles"; 
myBusinessAddress.Zip = 90210; 
myBusinessAddress.State = "California"; 

,但最有可能的,你沒有指定:如果您忘記了該選項

myBusinessAddress.StateFieldSpecified = true; 

,您的State字段將不會顯示在生成的序列化XML中。

設置該布爾屬性,它會顯示!

0

要做你想做的事情,你需要實現ISerializable接口的GetObjectData方法,並實現一個受保護的序列化構造函數。