2017-08-11 65 views
0

我有困难序列化提交的数据属性为以下,特别是提交的数据元素这是一个数组和每个submittedData元素都有一个字段数组(在此示例中每个提交的数据只显示1 )。 xsd.exe转换器也不处理submittedData部分。c#XML序列化到对象与多个阵列

任何建议将不胜感激。

<?xml version="1.0" encoding="UTF-8"?> 
<forms> 
<site>https://www.sample.com</site> 
<export_date>2017-08-09T12:04:11-04:00</export_date> 
<webform name="form A"> 
    <crmFormId>form_A</crmFormId> 
    <version>1.0</version> 
    <formData> 
    <WEBFORMNODESTATUS>Unpublished</WEBFORMNODESTATUS> 
    <submittedData> 
    <field> 
    <crmFieldKey>aEXTERNALID</crmFieldKey> 
    <crmFieldValue>1000</crmFieldValue> 
    </field> 
    </submittedData> 
    <submittedData> 
    <field> 
    <crmFieldKey>bEXTERNALID</crmFieldKey> 
    <crmFieldValue>2000</crmFieldValue> 
    </field> 
    </submittedData> 
    </formData> 
</webform> 
<webform name="form_B"> 
    <crmFormId>2</crmFormId> 
    <version>1.0</version> 
    <formData> 
    <WEBFORMNODESTATUS>Unpublished</WEBFORMNODESTATUS> 
    <submittedData> 
    <field> 
    <crmFieldKey>cEXTERNALID</crmFieldKey> 
    <crmFieldValue>1001</crmFieldValue> 
    </field> 
    </submittedData> 
    <submittedData> 
    <field> 
    <crmFieldKey>dEXTERNALID</crmFieldKey> 
    <crmFieldValue>1002</crmFieldValue> 
    </field> 
    </submittedData>   
    </formData> 
</webform> 
</forms> 

这是我正在使用的类。一切都很好,直到我尝试使用submittedData元素。

[XmlRoot()] 
public class forms 
{ 

    private string siteField; 
    private string export_dateField; 
    private formsWebform[] webformField; 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string site 
    { 
     get 
     { 
      return this.siteField; 
     } 
     set 
     { 
      this.siteField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string export_date 
    { 
     get 
     { 
      return this.export_dateField; 
     } 
     set 
     { 
      this.export_dateField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute("webform", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public formsWebform[] webform 
    { 
     get 
     { 
      return this.webformField; 
     } 
     set 
     { 
      this.webformField = value; 
     } 
    } 


} 


[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class formsWebform 
{ 

    private string crmFormIdField; 

    private string versionField; 

    private formsWebformFormData formDataField; 

    private string nameField; 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string crmFormId 
    { 
     get 
     { 
      return this.crmFormIdField; 
     } 
     set 
     { 
      this.crmFormIdField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string version 
    { 
     get 
     { 
      return this.versionField; 
     } 
     set 
     { 
      this.versionField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute("formData", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public formsWebformFormData formData 
    { 
     get 
     { 
      return this.formDataField; 
     } 
     set 
     { 
      this.formDataField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string name 
    { 
     get 
     { 
      return this.nameField; 
     } 
     set 
     { 
      this.nameField = value; 
     } 
    } 
} 

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class formsWebformFormData 
{ 

    private string wEBFORMNODESTATUSField; 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string WEBFORMNODESTATUS 
    { 
     get 
     { 
      return this.wEBFORMNODESTATUSField; 
     } 
     set 
     { 
      this.wEBFORMNODESTATUSField = value; 
     } 
    } 


    private List<SubmittedDataFields> submittedDataField; 

    [System.Xml.Serialization.XmlArray("submittedData")] 
    [System.Xml.Serialization.XmlArrayItem("field")] 
    public List<SubmittedDataFields> submittedData 
    { 
     get 
     { 
      return this.submittedDataField; 
     } 
     set 
     { 
      this.submittedDataField = value; 
     } 
    } 



} 


public partial class SubmittedDataFields 
{ 
    private formsWebformFormDataSubmittedDataField[] data; 

    public formsWebformFormDataSubmittedDataField[] fields 
    { 
     get{ 
      return this.data; 
     } 
     set { 
      this.data = value; 
     } 
    } 
} 

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public partial class formsWebformFormDataSubmittedDataField 
{ 

    private string crmFieldKeyField; 

    private string crmFieldValueField; 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string crmFieldKey 
    { 
     get 
     { 
      return this.crmFieldKeyField; 
     } 
     set 
     { 
      this.crmFieldKeyField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string crmFieldValue 
    { 
     get 
     { 
      return this.crmFieldValueField; 
     } 
     set 
     { 
      this.crmFieldValueField = value; 
     } 
    } 
} 

回答

0

尝试以下操作:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Serialization; 
using System.IO; 

namespace ConsoleApplication73 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(forms)); 
      StreamReader reader = new StreamReader(FILENAME); 
      forms _forms = (forms)serializer.Deserialize(reader); 

     } 
    } 
    [XmlRoot("forms")] 
    public class forms 
    { 

     private string siteField; 
     private string export_dateField; 
     private formsWebform[] webformField; 

     [XmlElement("site")] 
     public string site 
     { 
      get 
      { 
       return this.siteField; 
      } 
      set 
      { 
       this.siteField = value; 
      } 
     } 

     [XmlElement("export_date")] 
     public string export_date 
     { 
      get 
      { 
       return this.export_dateField; 
      } 
      set 
      { 
       this.export_dateField = value; 
      } 
     } 

     [XmlElement("webform")] 
     public formsWebform[] webform 
     { 
      get 
      { 
       return this.webformField; 
      } 
      set 
      { 
       this.webformField = value; 
      } 
     } 


    } 


    [XmlRoot("webform")] 
    public partial class formsWebform 
    { 

     private string crmFormIdField; 

     private string versionField; 

     private formsWebformFormData formDataField; 

     private string nameField; 

     [XmlElement("crmFormId")] 
     public string crmFormId 
     { 
      get 
      { 
       return this.crmFormIdField; 
      } 
      set 
      { 
       this.crmFormIdField = value; 
      } 
     } 

     [XmlElement("version")] 
     public string version 
     { 
      get 
      { 
       return this.versionField; 
      } 
      set 
      { 
       this.versionField = value; 
      } 
     } 

     [XmlElement("formData")] 
     public formsWebformFormData formData 
     { 
      get 
      { 
       return this.formDataField; 
      } 
      set 
      { 
       this.formDataField = value; 
      } 
     } 

     //[XmlElement("field")] 
     //public string name 
     //{ 
     // get 
     // { 
     //  return this.nameField; 
     // } 
     // set 
     // { 
     //  this.nameField = value; 
     // } 
     //} 
    } 

    [XmlRoot("formData")] 
    public partial class formsWebformFormData 
    { 

     private string wEBFORMNODESTATUSField; 

     [XmlElement("WEBFORMNODESTATUS")] 
     public string WEBFORMNODESTATUS 
     { 
      get 
      { 
       return this.wEBFORMNODESTATUSField; 
      } 
      set 
      { 
       this.wEBFORMNODESTATUSField = value; 
      } 
     } 


     private SubmittedDataFields[] submittedDataField; 

     [XmlElement("submittedData")] 
     public SubmittedDataFields[] submittedData 
     { 
      get 
      { 
       return this.submittedDataField; 
      } 
      set 
      { 
       this.submittedDataField = value; 
      } 
     } 



    } 

    [XmlRoot("submittedData")] 
    public partial class SubmittedDataFields 
    { 
     private formsWebformFormDataSubmittedDataField[] data; 

     [XmlElement("field")] 
     public formsWebformFormDataSubmittedDataField[] fields 
     { 
      get 
      { 
       return this.data; 
      } 
      set 
      { 
       this.data = value; 
      } 
     } 
    } 

    [XmlRoot("field")] 
    public partial class formsWebformFormDataSubmittedDataField 
    { 

     private string crmFieldKeyField; 

     private string crmFieldValueField; 

     [XmlElement("submittedData")] 
     public string crmFieldKey 
     { 
      get 
      { 
       return this.crmFieldKeyField; 
      } 
      set 
      { 
       this.crmFieldKeyField = value; 
      } 
     } 

     [XmlElement("crmFieldValue")] 
     public string crmFieldValue 
     { 
      get 
      { 
       return this.crmFieldValueField; 
      } 
      set 
      { 
       this.crmFieldValueField = value; 
      } 
     } 
    } 
} 
+0

感谢您的答复。但是,submittedData也是一个数组或列表。这个想法是每个表单有多个表单完成多个领域。 我所做的修复到.. [XmlElement的( “submittedData”)] 公共字符串crmFieldKey –

+0

我制成的修复可.. [XmlElement的( “submittedData”)] 公共字符串crmFieldKey 至[XmlElement的( “crmFieldKey” )] 公共字符串crmFieldKey –

+0

进行少量编辑 - 可能正在工作。 –