2017-03-20 5 views
0
serialisiert bekommen

ich erzeugen eine Laufzeitklasse Reflection.Emit verwenden, die Erzeugung der Klasse scheint in Ordnung zu sein, wie es in ILSpy zeigt:Eigenschaften nicht

using indice.Edi.Serialization; 
using IQoneEDIParser.Formats; 
using System; 
using System.Xml.Serialization; 

[XmlRoot("CONTRL"), XmlType("CONTRL")] 
[Serializable] 
public class CONTRL : FormatBase 
{ 
    private string _syntaxkennung; 

    private int _sintaxversion; 

    private string _absenderid; 

    private string _absendercodeunb; 

    private string _empfängerid; 

    private string _empfängercodeunb; 

    private string _dokumentdatum; 

    private string _dokumentzeit; 

    private string _datenaustauschreferenz; 

[EdiValue("X(4)", "UNB/0"), XmlElement("Syntaxkennung", typeof(string))] 
public string Syntaxkennung 
{ 
    get 
    { 
     return this._syntaxkennung; 
    } 
    set 
    { 
     this._syntaxkennung = value; 
    } 
} 

[EdiValue("9(1)", "UNB/0/1"), XmlElement("Sintaxversion", typeof(int))] 
public int Sintaxversion 
{ 
    get 
    { 
     return this._sintaxversion; 
    } 
    set 
    { 
     this._sintaxversion = value; 
    } 
} 

[EdiValue("X(35)", "UNB/1/0"), XmlElement("AbsenderID", typeof(string))] 
public string AbsenderID 
{ 
    get 
    { 
     return this._absenderid; 
    } 
    set 
    { 
     this._absenderid = value; 
    } 
} 

[EdiValue("X(4)", "UNB/1/1"), XmlElement("AbsenderCodeUNB", typeof(string))] 
public string AbsenderCodeUNB 
{ 
    get 
    { 
     return this._absendercodeunb; 
    } 
    set 
    { 
     this._absendercodeunb = value; 
    } 
} 

[EdiValue("X(35)", "UNB/2/0"), XmlElement("EmpfängerID", typeof(string))] 
public string EmpfängerID 
{ 
    get 
    { 
     return this._empfängerid; 
    } 
    set 
    { 
     this._empfängerid = value; 
    } 
} 

[EdiValue("X(4)", "UNB/2/1"), XmlElement("EmpfängerCodeUNB", typeof(string))] 
public string EmpfängerCodeUNB 
{ 
    get 
    { 
     return this._empfängercodeunb; 
    } 
    set 
    { 
     this._empfängercodeunb = value; 
    } 
} 

[EdiValue("X(6)", "UNB/3/0"), XmlElement("Dokumentdatum", typeof(string))] 
public string Dokumentdatum 
{ 
    get 
    { 
     return this._dokumentdatum; 
    } 
    set 
    { 
     this._dokumentdatum = value; 
    } 
} 

[EdiValue("X(4)", "UNB/3/1"), XmlElement("Dokumentzeit", typeof(string))] 
public string Dokumentzeit 
{ 
    get 
    { 
     return this._dokumentzeit; 
    } 
    set 
    { 
     this._dokumentzeit = value; 
    } 
} 

[EdiValue("X(14)", "UNB/4/0"), XmlElement("Datenaustauschreferenz", typeof(string))] 
public string Datenaustauschreferenz 
{ 
    get 
    { 
     return this._datenaustauschreferenz; 
    } 
    set 
    { 
     this._datenaustauschreferenz = value; 
    } 
} 
} 

Für unbekannten Gründen die einzige Eigenschaft serialisiert bedürftig xML ist die Syntaxversion (das einzige, das ist Typ Integer)

Hier ist die Serialisierungsmethode:

public static String SerializeToXml(FormatBase toSerialize, Type inType) 
    { 

     XmlWriterSettings xmlSettings = new XmlWriterSettings 
     { 
      Encoding = Encoding.UTF8, 
      Indent = true, 
      OmitXmlDeclaration = true, 
      NewLineOnAttributes = true, 
      CloseOutput = true 
     }; 

     using (StringWriter stringWriter = new StringWriter()) 
     { 
      XmlSerializer serializer2 = new XmlSerializer(inType); 
      using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlSettings)) 
      { 
       XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
       ns.Add("", ""); 

       serializer2.Serialize(xmlWriter, toSerialize, ns); 

       return stringWriter.ToString(); 
      } 
     } 
    } 

Irgendwelche Ideen, warum die übrigen Eigenschaften sind nicht ge tting serialisiert? Danke im Voraus!

EDIT_1: Nach weiteren Tests, die ich die erzeugte Klasse copy-paste und erstellt sie als „normale“ Art in meinem Projekt, versuchen Sie es erneut die Serialisierung Methode, und wie erwartet (siehe EDIT_2)

es kann ein Reflection.Emit-Problem und/oder meine Laufzeitassembly sein?

EDIT_2: Erwartetes Ergebnis aus der XML-Serialisierung:

<CONTRL> 
    <Syntaxkennung>UNOC</Syntaxkennung> 
    <Sintaxversion>3</Sintaxversion> 
    <AbsenderID>9904325000003</AbsenderID> 
    <AbsenderCodeUNB>500</AbsenderCodeUNB> 
    <EmpfängerID>9900080000007</EmpfängerID> 
    <EmpfängerCodeUNB>500</EmpfängerCodeUNB> 
    <Dokumentdatum>161007</Dokumentdatum> 
    <Dokumentzeit>1723</Dokumentzeit> 
</CONTRL> 

empfangen:

<CONTRL> 
    <Sintaxversion>3</Sintaxversion> 
</CONTRL> 
+1

Ich kann 'Syntaxversion' nirgendwo in Ihrem Code finden, es gibt keine Eingabe XML, kein erwartetes Ergebnis und stattdessen empfangen. Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve). – Sinatr

+0

Ich werde meine diesbezügliche Frage ändern. – Nekeniehl

+0

Sintaxversion ist eine der Eigenschaften in der generierten Klasse. Leider kann ich keinen Testfall bereitstellen, da der Code zum Generieren der Klasse extrem lang ist. – Nekeniehl

Antwort

0

ich am Ende IXmlSerializable in der FormatBase (Basisklasse) Umsetzung

public void WriteXml(XmlWriter writer) 
    { 
     foreach (PropertyInfo property in GetType().GetProperties()) 
     { 
      writer.WriteElementString(property.Name, property.GetValue(this)?.ToString()); 
     } 
    } 

Und Arbeiten wie erwartet.

Verwandte Themen