【问题标题】:c# XML Serialization to Object with Multiple Arraysc# XML 序列化为具有多个数组的对象
【发布时间】:2017-08-11 17:07:18
【问题描述】:

我在序列化以下内容的提交数据属性时遇到了困难,特别是作为数组的提交数据元素,每个提交数据元素都有一个字段数组(在此示例中,每个提交数据仅显示 1 个)。 xsd.exe 转换器也不处理提交的数据部分。

任何建议都将不胜感激。

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

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

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

【问题讨论】:

    标签: c# arrays xml nested deserialization


    【解决方案1】:

    尝试以下:

    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")] public string crmFieldKey
    • 我修复了.. [XmlElement("submittedData")] public string crmFieldKey to [XmlElement("crmFieldKey")] public string crmFieldKey
    • 上次编辑:我将 submitData 属性更改为一个数组,一切似乎都正常。感谢您的帮助。非常感激。私人提交数据字段[] 提交数据字段; [XmlElement("submittedData")] public SubmittedDataFields[] submitData { get { return this.submittedDataField; } 设置 { this.submittedDataField = value; } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多