Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将此XML反序列化为对象的最佳方法_C#_Asp.net Mvc_Xml Deserialization - Fatal编程技术网

C# 将此XML反序列化为对象的最佳方法

C# 将此XML反序列化为对象的最佳方法,c#,asp.net-mvc,xml-deserialization,C#,Asp.net Mvc,Xml Deserialization,在其他与我类似的示例中,有一个根节点,然后是一个数组节点,然后是一组数组项。我的问题是,我的根节点是我的数组节点,因此我看到的示例似乎对我不适用,并且我无法更改XML模式。以下是XML: <articles> <article> <guid>7f6da9df-1a91-4e20-8b66-07ac7548dc47</guid> <order>1</order> <type

在其他与我类似的示例中,有一个根节点,然后是一个数组节点,然后是一组数组项。我的问题是,我的根节点我的数组节点,因此我看到的示例似乎对我不适用,并且我无法更改XML模式。以下是XML:

<articles>  
    <article>
      <guid>7f6da9df-1a91-4e20-8b66-07ac7548dc47</guid>
      <order>1</order>
      <type>deal_abstract</type>
      <textType></textType>
      <id></id>
      <title>Abu Dhabi's IPIC Eyes Bond Sale After Cepsa Buy</title>
      <summary>Abu Dhabi's IPIC has appointed banks for a potential sterling and euro-denominated bond issue, a document showed on Wednesday, after the firm acquired Spain's Cepsa in a $5 billion deal earlier this month...</summary>
      <readmore></readmore>
      <fileName></fileName>
      <articleDate>02/24/2011 00:00:00 AM</articleDate>
      <articleDateType></articleDateType>
    </article>

    <article>
      <guid>1c3e57a0-c471-425a-87dd-051e69ecb7c5</guid>
      <order>2</order>
      <type>deal_abstract</type>
      <textType></textType>
      <id></id>
      <title>Big Law Abuzz Over New China Security Review</title>
      <summary>China’s newly established foreign investment M&amp;A review committee has been the subject of much legal chatter in the Middle Kingdom and beyond. Earlier this month, the State Council unveiled legislative guidance on…</summary>
      <readmore></readmore>
      <fileName></fileName>
      <articleDate>02/23/2011 00:00:00 AM</articleDate>
      <articleDateType></articleDateType>
    </article>  
</articles>

这是来自外部API的XML响应。

我能想到的最简单的方法可能是使用该工具。您给它XML,它将从中生成一个模式。您可能需要稍微调整模式,但它应该很接近

从那里,您可以通过xsd将相同的模式发送回以从中生成类

  • 将其放入VisualStudio中的xml中
  • 创建xsd模式
  • 使用“C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\xsd.exe”“MyXsd.xsd”/t:lib/l:cs/C/namespace:my.xsd/outputdir:“C:\testtttt”
  • 现在你的c#类已经准备好了

    现在,您可以使用:

    internal class ParseXML 
    {
        public static xsdClass ToClass<xsdClass>(XElement ResponseXML)
        {
            return deserialize<xsdClass>(ResponseXML.ToString(SaveOptions.DisableFormatting));
        } 
    
    
        private static result deserialize<result>(string XML)
        {
            using (TextReader textReader = new StringReader(XML))
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(result));
                return (result) xmlSerializer.Deserialize(textReader);
            }
        } 
    } 
    
    内部类解析XML
    {
    公共静态xsdClass到类(XElement ResponseXML)
    {
    返回反序列化(ResponseXML.ToString(SaveOptions.DisableFormatting));
    } 
    私有静态结果反序列化(字符串XML)
    {
    使用(TextReader TextReader=new StringReader(XML))
    {
    XmlSerializer XmlSerializer=新的XmlSerializer(typeof(result));
    返回(结果)xmlSerializer.Deserialize(textReader);
    }
    } 
    } 
    
    结果:

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:4.0.30319.1
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    using System.Xml.Serialization;
    
    // 
    // This source code was auto-generated by xsd, Version=4.0.30319.1.
    // 
    
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
    public partial class articles {
    
        private articlesArticle[] itemsField;
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("article", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public articlesArticle[] Items {
            get {
                return this.itemsField;
            }
            set {
                this.itemsField = value;
            }
        }
    }
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class articlesArticle {
    
        private string guidField;
    
        private string orderField;
    
        private string typeField;
    
        private string textTypeField;
    
        private string idField;
    
        private string titleField;
    
        private string summaryField;
    
        private string readmoreField;
    
        private string fileNameField;
    
        private string articleDateField;
    
        private string articleDateTypeField;
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string guid {
            get {
                return this.guidField;
            }
            set {
                this.guidField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string order {
            get {
                return this.orderField;
            }
            set {
                this.orderField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string type {
            get {
                return this.typeField;
            }
            set {
                this.typeField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string textType {
            get {
                return this.textTypeField;
            }
            set {
                this.textTypeField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string id {
            get {
                return this.idField;
            }
            set {
                this.idField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string title {
            get {
                return this.titleField;
            }
            set {
                this.titleField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string summary {
            get {
                return this.summaryField;
            }
            set {
                this.summaryField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string readmore {
            get {
                return this.readmoreField;
            }
            set {
                this.readmoreField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string fileName {
            get {
                return this.fileNameField;
            }
            set {
                this.fileNameField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string articleDate {
            get {
                return this.articleDateField;
            }
            set {
                this.articleDateField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string articleDateType {
            get {
                return this.articleDateTypeField;
            }
            set {
                this.articleDateTypeField = value;
            }
        }
    }
    
    //------------------------------------------------------------------------------
    // 
    //这段代码是由一个工具生成的。
    //运行时版本:4.0.30319.1
    //
    //对此文件的更改可能会导致不正确的行为,如果
    //重新生成代码。
    // 
    //------------------------------------------------------------------------------
    使用System.Xml.Serialization;
    // 
    //此源代码由xsd自动生成,版本=4.0.30319.1。
    // 
    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”,“4.0.30319.1”)]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(“代码”)]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
    公共部分类文章{
    私人物品第[]条项目字段;
    /// 
    [System.Xml.Serialization.xmlementAttribute(“article”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共物品第[]条项目{
    得到{
    返回此.itemsField;
    }
    设置{
    this.itemsField=值;
    }
    }
    }
    /// 
    [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”,“4.0.30319.1”)]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute(“代码”)]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    公共部分类文章文章{
    私有字符串引导字段;
    私有字符串orderField;
    私有字符串类型字段;
    私有字符串textTypeField;
    专用字符串字段;
    私有字符串标题字段;
    私有字符串总和字段;
    私有字符串readmoreField;
    私有字符串fileNameField;
    私有字符串articleDateField;
    私有字符串articleDateTypeField;
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串guid{
    得到{
    返回this.guidField;
    }
    设置{
    this.guidField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串秩序{
    得到{
    返回this.orderField;
    }
    设置{
    this.orderField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串类型{
    得到{
    返回此.typeField;
    }
    设置{
    this.typeField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串文本类型{
    得到{
    返回此.textTypeField;
    }
    设置{
    this.textTypeField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串id{
    得到{
    返回此.idField;
    }
    设置{
    this.idField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串标题{
    得到{
    把这个还给我;
    }
    设置{
    this.titleField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串摘要{
    得到{
    返回此.summaryField;
    }
    设置{
    this.summaryField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串读取更多{
    得到{
    返回此.readmoreField;
    }
    设置{
    this.readmoreField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串文件名{
    得到{
    返回this.fileNameField;
    }
    设置{
    this.fileNameField=值;
    }
    }
    /// 
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串articleDate{
    得到{
    返回此.articledate字段;
    }
    设置{
    这个
    
    >xsd test.xml
    Microsoft (R) Xml Schemas/DataTypes support utility
    [Microsoft (R) .NET Framework, Version 4.0.30319.1]
    Copyright (C) Microsoft Corporation. All rights reserved.
    Writing file 'test.xsd'.
    
    >xsd /c test.xsd
    Microsoft (R) Xml Schemas/DataTypes support utility
    [Microsoft (R) .NET Framework, Version 4.0.30319.1]
    Copyright (C) Microsoft Corporation. All rights reserved.
    Writing file 'test.cs'.
    
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:4.0.30319.1
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    using System.Xml.Serialization;
    
    // 
    // This source code was auto-generated by xsd, Version=4.0.30319.1.
    // 
    
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
    public partial class articles {
    
        private articlesArticle[] itemsField;
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("article", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public articlesArticle[] Items {
            get {
                return this.itemsField;
            }
            set {
                this.itemsField = value;
            }
        }
    }
    
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public partial class articlesArticle {
    
        private string guidField;
    
        private string orderField;
    
        private string typeField;
    
        private string textTypeField;
    
        private string idField;
    
        private string titleField;
    
        private string summaryField;
    
        private string readmoreField;
    
        private string fileNameField;
    
        private string articleDateField;
    
        private string articleDateTypeField;
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string guid {
            get {
                return this.guidField;
            }
            set {
                this.guidField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string order {
            get {
                return this.orderField;
            }
            set {
                this.orderField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string type {
            get {
                return this.typeField;
            }
            set {
                this.typeField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string textType {
            get {
                return this.textTypeField;
            }
            set {
                this.textTypeField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string id {
            get {
                return this.idField;
            }
            set {
                this.idField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string title {
            get {
                return this.titleField;
            }
            set {
                this.titleField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string summary {
            get {
                return this.summaryField;
            }
            set {
                this.summaryField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string readmore {
            get {
                return this.readmoreField;
            }
            set {
                this.readmoreField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string fileName {
            get {
                return this.fileNameField;
            }
            set {
                this.fileNameField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string articleDate {
            get {
                return this.articleDateField;
            }
            set {
                this.articleDateField = value;
            }
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string articleDateType {
            get {
                return this.articleDateTypeField;
            }
            set {
                this.articleDateTypeField = value;
            }
        }
    }
    
    using System;
    using System.IO;
    using System.Xml.Serialization;
    
    namespace xmlTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var articles = new Articles();
                articles.ArticleArray = new ArticlesArticle[2]
                {
                    new ArticlesArticle()
                        {
                            Guid = Guid.NewGuid(),
                            Order = 1,
                            Type = "deal_abstract",
                            Title = "Abu Dhabi...",
                            Summary = "Abu Dhabi...",
                            ArticleDate = new DateTime(2011,2,24)
                        },
                    new ArticlesArticle()
                        {
                            Guid = Guid.NewGuid(),
                            Order = 2,
                            Type = "deal_abstract",
                            Title = "Abu Dhabi...",
                            Summary = "China...",
                            ArticleDate = new DateTime(2011,2,23)
                        },
                };
    
                var sw = new StringWriter();
                var xmlSer = new XmlSerializer(typeof (Articles));
                var noNamespaces = new XmlSerializerNamespaces();
                noNamespaces.Add("", ""); 
                xmlSer.Serialize(sw, articles,noNamespaces);
                Console.WriteLine(sw.ToString());
            }
        }
    
        [XmlRoot(ElementName = "articles", Namespace = "", IsNullable = false)]
        public class Articles
        {
            [XmlElement("article")]
            public ArticlesArticle[] ArticleArray { get; set; }
        }
    
        public class ArticlesArticle
        {
            [XmlElement("guid")]
            public Guid Guid { get; set; }
            [XmlElement("order")]
            public int Order { get; set; }
            [XmlElement("type")]
            public string Type { get; set; }
            [XmlElement("textType")]
            public string TextType { get; set; }
            [XmlElement("id")]
            public int Id { get; set; }
            [XmlElement("title")]
            public string Title { get; set; }
            [XmlElement("summary")]
            public string Summary { get; set; }
            [XmlElement("readmore")]
            public string Readmore { get; set; }
            [XmlElement("fileName")]
            public string FileName { get; set; }
            [XmlElement("articleDate")]
            public DateTime ArticleDate { get; set; }
            [XmlElement("articleDateType")]
            public string ArticleDateType { get; set; }
        }
    }