3

標準の住所プロパティを取得して保存するクラスがあります。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 には、文字列キーと値を持つプライベート ディクショナリが含まれています。デフォルトのコンストラクターはディクショナリをロードし、オーバーロードによって呼び出されます。公開プロパティは State のみです。次のようにコード化されます。

    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 プロパティの値としてカリフォルニアが表示されます。

私は何を間違っていますか?

4

2 に答える 2

8

BusinessAddressのインスタンスを作成し、さまざまなプロパティを指定したと仮定します。

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

しかし、ほとんどの場合、指定していません:

myBusinessAddress.StateFieldSpecified = true;

このオプションを忘れるとState、結果のシリアル化された XML にフィールドが表示されなくなります。

そのブール値のプロパティを設定すると、表示されます!

于 2011-05-19T20:26:32.600 に答える
0

必要なことを行うGetObjectDataには、インターフェイスのメソッドをISerializable実装し、保護されたシリアル化コンストラクターを実装する必要があります。

于 2011-05-19T20:14:02.753 に答える