2017-03-20 39 views
0

我使用Reflection.Emit的生成運行時類,這個類的一代人似乎要被罰款,因爲它顯示了在ILSpy:屬性沒有得到連載

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

對於任何未知的原因,唯一的財產得到序列化到XML是Syntaxversion(唯一一個爲整數類型)

這裏的序列化方法:

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

爲什麼屬性其餘的都是不GE任何想法序列化?提前致謝!

EDIT_1: 經過進一步的測試中,我複製粘貼生成的類,並創造了它在我的項目「正常」的類型,再次嘗試序列化方法,並且按預期方式工作(見EDIT_2)

可不可以是一個Reflection.Emit問題和/或我的運行時程序集?

EDIT_2:

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

收稿:

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

我找不到'Syntaxversion'在你的代碼中的任何地方,沒有輸入XML,沒有預期的結果,而是接收。尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。 – Sinatr

+0

我會修改我的問題。 – Nekeniehl

+0

Sintaxversion是生成類中的屬性之一。 可悲的是我無法提供任何測試用例,因爲生成類的代碼非常長 – Nekeniehl

回答

0

我最終在FormatBase(基類)實施IXmlSerializable的

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

,並從XML序列化 預期結果按預期工作。

相關問題