Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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反序列化:从xmlString到复杂类_C#_.net_Xml_Class_Deserialization - Fatal编程技术网

C# XML反序列化:从xmlString到复杂类

C# XML反序列化:从xmlString到复杂类,c#,.net,xml,class,deserialization,C#,.net,Xml,Class,Deserialization,这是我从数据库中获得的xml: 我得到的错误是: XML文档(1,2)中存在错误。请查看本文。您可以自动生成所需的所有内容,因此不必手动编写代码并出错 关于您在问题中的评论 基本上,我无法获取Library.Header.ID的值。我怎样才能做到呢 因为它是Library.Header.HeaderID而不是Library.Header.ID。。您的属性名为ID 在属性上使用并定义数据注释来映射元素 using System.Xml.Serialization; public class

这是我从数据库中获得的xml:

我得到的错误是:


XML文档(1,2)中存在错误。

请查看本文。您可以自动生成所需的所有内容,因此不必手动编写代码并出错


关于您在问题中的评论

基本上,我无法获取Library.Header.ID的值。我怎样才能做到呢

因为它是
Library.Header.HeaderID
而不是
Library.Header.ID
。。您的属性名为
ID

在属性上使用并定义数据注释来映射元素

 using System.Xml.Serialization;

 public class Header
 {
   [XmlElement(DataType = "integer", ElementName = "HeaderID")]
   int ID{get;set;}
 }

我的新课程看起来像这样,工作起来很有魅力:

 [XmlRoot("Library")]
    public class Library
    {
         [XmlElement("Header")]
        public Header header { get; set; }
         [XmlElement("Book")]
        public List<Book> books { get; set; }
         [XmlElement("Author")]
        public List<Author> authors { get; set; }
    }


    public class Header
    {

        public int HeaderID { get; set; }
    }

    public class Book
    {
        public string Name { get; set; }
        public string Category { get; set; }
        public string Fiction { get; set; }
    }

    public class Author
    {
       public  string Name { get; set; }
    }
[XmlRoot(“库”)]
公共班级图书馆
{
[XmlElement(“标题”)]
公共标头{get;set;}
[XmlElement(“书”)]
公共列表书籍{get;set;}
[XmlElement(“作者”)]
公共列表作者{get;set;}
}
公共类标题
{
public int HeaderID{get;set;}
}
公共课堂用书
{
公共字符串名称{get;set;}
公共字符串类别{get;set;}
公共字符串{get;set;}
}
公共类作者
{
公共字符串名称{get;set;}
}

考虑发布
RequestXml
的实际值,而不是您认为的值应该是什么。发布完整的例外您的示例对我来说是有效的。我所要做的就是更改属性的大小写并将其公开,然后将其完全反序列化。当然,这假设XML中额外的“>”字符是工件,而不是实际文本的一部分。。。因为如果是的话,我想你已经发现了你的问题。当我试图将所有变量更改为public时。这很好用。尽管如此,反序列化并不会填充myTest中的值。我手工编码的原因是因为我不想要数组…当我使用xsd时,它会自动将我的列表作为数组。注意,
DataType=“integer”
DataType=“int”
在msdn链接的备注部分。我看到的问题是,您的xml代码片段有01。。我不确定你是否应该进行语法分析。非常感谢。这帮助我解决了这个问题。
String xData = RequestXml;
XmlSerializer x = new XmlSerializer(typeof(Library));
Library myTest = (Library)x.Deserialize(new StringReader(xData));
 using System.Xml.Serialization;

 public class Header
 {
   [XmlElement(DataType = "integer", ElementName = "HeaderID")]
   int ID{get;set;}
 }
 [XmlRoot("Library")]
    public class Library
    {
         [XmlElement("Header")]
        public Header header { get; set; }
         [XmlElement("Book")]
        public List<Book> books { get; set; }
         [XmlElement("Author")]
        public List<Author> authors { get; set; }
    }


    public class Header
    {

        public int HeaderID { get; set; }
    }

    public class Book
    {
        public string Name { get; set; }
        public string Category { get; set; }
        public string Fiction { get; set; }
    }

    public class Author
    {
       public  string Name { get; set; }
    }