c#XML序列化到对象与多个阵列
问题描述:
我有困难序列化提交的数据属性为以下,特别是提交的数据元素这是一个数组和每个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;
}
}
}
答
尝试以下操作:
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;
}
}
}
}
感谢您的答复。但是,submittedData也是一个数组或列表。这个想法是每个表单有多个表单完成多个领域。 我所做的修复到.. [XmlElement的( “submittedData”)] 公共字符串crmFieldKey –
我制成的修复可.. [XmlElement的( “submittedData”)] 公共字符串crmFieldKey 至[XmlElement的( “crmFieldKey” )] 公共字符串crmFieldKey –
进行少量编辑 - 可能正在工作。 –