簡體   English   中英

對象未將所有屬性序列化為XML

[英]Object not serializing all properties to XML

我有一個采用標准地址屬性並將其存儲的類。 State屬性的類型為USStateCodesType。 這是用於存儲屬性的代碼示例:

[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 String時,我得到如下信息:

  <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>

我在序列化之前檢查對象的屬性,“狀態屬性”將“加利福尼亞”顯示為該值。

我究竟做錯了什么?

我假設您創建了BusinessAddress的實例並指定了各種屬性:

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

但很可能您沒有指定:

myBusinessAddress.StateFieldSpecified = true;

如果忘記了該選項,則“ State字段將不會顯示在生成的序列化XML中。

設置該布爾屬性,它將顯示出來!

要執行所需的操作,您需要實現ISerializable接口的GetObjectData方法,並實現一個受保護的序列化構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM