2009-12-03 3 views
0

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

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

ответ

0

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

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

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

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

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

0

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

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>