2016-04-24 6 views
0

Im Verwenden der XmlSerializer-Klasse zum Serialisieren einer abgeleiteten Klasse "MyContext", die eine Basisklasse "BaseClass" erbt. Die Basisklassenattribute "attr1", "attr2" sind in der serialisierten XML-Ausgabe nicht vorhanden. Ich benötige diese Attribute in der Context-Klasse und der geschachtelten Klasse innerhalb der Context-Klasse. Bitte helft was hier fehlt.Xml-Serialisierung Basisklassenattribute

namespace MyConsoleApplication 
{ 
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MyContextType))] 
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    public partial class BaseType 
    { 
    private MyEnumType attr1Field; 
    private MyEnumType attr2Field; 

    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public MyEnumType Attr1 
     { 
      get 
      { 
       return this.attr1Field; 
      } 
      set 
      { 
       this.attr1Field= value; 
      } 
     } 

    [System.Xml.Serialization.XmlAttributeAttribute()]  
    public MyEnumType Attr2 
     { 
      get 
      { 
       return this.attr2Field; 
      } 
      set 
      { 
       this.attr2Field= value; 
      } 
     } 
    } 


    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] 
    [System.SerializableAttribute()] 
    [System.Diagnostics.DebuggerStepThroughAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlRootAttribute("Context", Namespace = "", IsNullable = false)] 
    public partial class MyContextType : BaseType 
    { 
     private string element1Field; 

     private string element2Field; 

     [System.Xml.Serialization.XmlElementAttribute(Order = 0)] 
     public string Element1 
     { 
      get 
      { 
       return this.element1Field; 
      } 
      set 
      { 
       this.element1Field = value; 
      } 
     } 
     [System.Xml.Serialization.XmlElementAttribute(Order = 1)] 
     public string Element2 
     { 
      get 
      { 
       return this.element2Field; 
      } 
      set 
      { 
       this.element2Field = value; 
      } 
     } 
    } 

    public enum MyEnumType 
    { 

     /// <remarks/> 
     False, 

     /// <remarks/> 
     True, 
    } 
} 

Mein Serializer Code:

var mydoc = new XmlDocument(); 
var context = new MyContextType() { Element1 = "Car", Element2 = "Bike", Attr1 = "id1", Attr2 = "id2" }; 

using (MemoryStream stream = new MemoryStream()) 
    { 
     XmlSerializer s = new XmlSerializer(typeof(MyContextType)); 
     s.Serialize(XmlWriter.Create(stream), context); 
     stream.Flush(); 
     stream.Seek(0, SeekOrigin.Begin); 
     mydoc.Load(stream); 
    } 

XML-Output-:

<MyContext> 
    <Element1>Happy</Element1> 
    <Element2>10</Element2> 
</MyContext> 

Aber ich möchte, dass die Ausgabe als

<MyContext attr1 = "False" attr2="False"> 
     <Element1>Happy</Element1> 
     <Element2>10</Element2> 
</MyContext> 
+0

'XmlSerializer' wird nur öffentliche Klassen und Mitglieder serialisieren. Wie es ist, kann Ihre 'MyContext' Klasse überhaupt nicht serialisiert werden. Können Sie bitte ein vollständiges Beispiel (https://stackoverflow.com/help/mcve) Ihres Problems angeben? – dbc

+0

Ihr Code wird nicht kompiliert und Ihre Klassen und Eigenschaften sind nicht öffentlich. Sobald ich diese Probleme plausibel gemacht habe, kann ich Ihr Problem nicht reproduzieren. Siehe https://dotnetfiddle.net/ueui7z – dbc

+0

dbc: Das Codebeispiel wurde wie gewünscht aktualisiert. überprüfen Sie bitte und lassen Sie mich wissen – KKR

Antwort

0

Die Lösung der "Attr1Specified" zu spezifizieren war Wert zu wahr. Hier ist die Antwort.

var context = new MyContextType() { Element1 = "Car", Element2 = "Bike", Attr1 = MyEnumType.False, Attr1Specified = true, Attr2 = MyEnumType.False, Attr2Specified = true };