.NET XML сериализация - PullRequest
       16

.NET XML сериализация

1 голос
/ 04 декабря 2009

Я использовал утилиту xsd для генерации файла * .cs из файла * .xsd. Я хотел бы сгенерировать XML из этого сгенерированного класса путем сериализации экземпляра класса. Есть ли способ получить «чистый» вывод, как это:

<header>
  <br/>
  <br/>
  <br/>
  <br/>
</header>

Вот два примера не совсем чистого вывода, который я получаю:

<header>
  <br xsi:type="xsd:string" />
  <br xsi:type="xsd:string" />
  <br xsi:type="xsd:string" />
  <br xsi:type="xsd:string" />
</header>

<header>
  <br xsi:nil="true" />
  <br xsi:nil="true" />
  <br xsi:nil="true" />
  <br xsi:nil="true" />
</header>

Выполнение этого кода для создания сериализуемого объекта:

KioskSchema.applicationScreens screenContainer = new KioskSchema.applicationScreens();
//screenContainer.header = new object[] { null, null, null, null };                                     //didn’t work
//screenContainer.header = new string[] { "<br/>", "<br/>", "<br/>", "<br/>"};               //didn’t work
screenContainer.header = new string[] { string.Empty, string.Empty, string.Empty, string.Empty };       //didn’t work

Вот класс, сгенерированный из утилиты xsd

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class applicationScreens
{

       private object[] headerField;

       private applicationScreensScreen[] screenField;

       /// <remarks/>
       [System.Xml.Serialization.XmlArrayItemAttribute("br", IsNullable = false)]
       public object[] header
       {
              get
              {
                     return this.headerField;
              }
              set
              {
                     this.headerField = value;
              }
       }
}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2009

Утилита xsd устанавливает тип свойства заголовка и его закрытого члена, доступного для объекта []. Ручная замена их на строку [] исправила проблему!

public partial class applicationScreens
{

    private string[] headerField;

    private applicationScreensScreen[] screenField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("br", Namespace="",  IsNullable = false)]
    public string[] header
    {
        get
        {
            return this.headerField;
        }
        set
        {
            this.headerField = value;
        }
    }

Фактический объем производства:

<header>
  <br />
  <br />
  <br />
  <br />
</header>
0 голосов
/ 04 декабря 2009

Похоже, что пространство имен добавляется, когда вы этого не хотите.

Измените атрибут XmlArrayItemAttribute в сгенерированном файле .cs - добавьте Namespace = null или Namespace = string.Empty:

[System.Xml.Serialization.XmlArrayItemAttribute("br", IsNullable = false, Namespace = string.Empty)]

Это должно переопределить пространство имен по умолчанию, которое добавляется.

Подробнее о XmlArrayItemAttribute в MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...