Объект не сериализует все свойства в XML - PullRequest
2 голосов
/ 20 мая 2011

У меня есть класс, который берет стандартные свойства адреса и сохраняет их. Свойство 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, я получаю что-то вроде этого:

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

Я проверяю свойства объекта перед сериализацией, а в свойстве штата в качестве значения отображается Калифорния.

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 20 мая 2011

Я бы предположил, что вы создали экземпляр 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 голосов
/ 20 мая 2011

Чтобы сделать то, что вы хотите, вам нужно реализовать метод GetObjectData интерфейса ISerializable и реализовать конструктор защищенной сериализации.

...