2017-08-11 3 views
0

Je rencontre des difficultés pour sérialiser l'attribut de données soumis pour les éléments suivants, en particulier l'élément submittedData qui est un tableau et chaque élément submittedData a un tableau de champs (1 seul par données soumises dans cet exemple). Le convertisseur xsd.exe ne gère pas non plus la partie submittedData.C# Sérialisation XML à l'objet avec plusieurs tableaux

Toutes les recommandations seraient grandement appréciées.

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

Voici la classe que j'utilise. Tout va bien jusqu'à ce que j'essaie de travailler avec l'élément 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; 
     } 
    } 
} 

Répondre

0

Essayez suivante:

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

Merci pour la réponse. Cependant, submittedData est également un tableau ou une liste. L'idée est que chaque formulaire a plusieurs formulaires remplis avec plusieurs champs. J'ai fait une solution à .. [XmlElement ("submittedData")] chaîne publique crmFieldKey –

+0

J'ai fait une solution à .. [XmlElement ("submittedData")] public string crmFieldKey à [XmlElement ("crmFieldKey")] public string crmFieldKey –

+0

Faire quelques modifications - peut-être fonctionner. –