2012-03-01 1 views
0

xmlを複数のクラスオブジェクトにデシリアライズする際に問題が発生しています。私がデシリアライズしようとするとき 私は "期待されていませんでした。私は、この内部例外を取得し、このコードを実行しようとすると、ここで直列化解除エラー: "<book xmlns = ''>は予期していませんでした。 xml文字列からDeSerialize

は私の呼び出し元のコードが

StringReader strReader = new StringReader(xml);   
XmlTextReader reader = new XmlTextReader(strReader); 
reader.ReadToDescendant("book"); 
var temp = DeserializeFromXml<book>(reader.ReadOuterXml()); 

public static T DeserializeFromXml<T>(string xml) 
    { 
     T result; 
     XmlRootAttribute xRoot = new XmlRootAttribute(); 
     XmlSerializer ser = new XmlSerializer(typeof(T)); 
     using (TextReader tr = new StringReader(xml)) 
     { 
      result = (T)ser.Deserialize(tr); 
     } 
     return result; 
    } 

されるXMLは、文字列メッセージ

<?xml version="1.0" encoding="UTF-8"?><books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 
<book genre="novel"> 
    <title>The Handmaid's Tale</title> 
    <price>19.95</price> 
    <ISBN>1-861003-78</ISBN> 
    <style>hardcover</style> 
</book> 
<library genre="novel"> 
    <name>Oxford</name> 
    <location>london</location> 
    <ISBN>1-8888888-88</ISBN> 
    <address>12th main, chesmedia</address> 
</library> 

である "予想されなかったの。"

はここに私のクラスコードである

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://tempuri.org/SampleBooks.xsd")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://tempuri.org/SampleBooks.xsd", IsNullable = false)] 
public partial class books 
{ 

    private book bookField; 

    private library libraryField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    public books() 
    { 
     this.libraryField = new library(); 
     this.bookField = new book(); 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 0)] 
    public book book 
    { 
     get 
     { 
      return this.bookField; 
     } 
     set 
     { 
      this.bookField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 1)] 
    public library library 
    { 
     get 
     { 
      return this.libraryField; 
     } 
     set 
     { 
      this.libraryField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(books)); 
      } 
      return serializer; 
     } 
    } 

} 

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://tempuri.org/SampleBooks.xsd")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://tempuri.org/SampleBooks.xsd", IsNullable = false)] 
public partial class book 
{ 

    private title titleField; 

    private decimal priceField; 

    private ISBN iSBNField; 

    private style styleField; 

    private bookGenre genreField; 

    private static System.Xml.Serialization.XmlSerializer serializer; 

    [System.Xml.Serialization.XmlElementAttribute(Order = 0)] 
    public title title 
    { 
     get 
     { 
      return this.titleField; 
     } 
     set 
     { 
      this.titleField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 1)] 
    public decimal price 
    { 
     get 
     { 
      return this.priceField; 
     } 
     set 
     { 
      this.priceField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 2)] 
    public ISBN ISBN 
    { 
     get 
     { 
      return this.iSBNField; 
     } 
     set 
     { 
      this.iSBNField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlElementAttribute(Order = 3)] 
    public style style 
    { 
     get 
     { 
      return this.styleField; 
     } 
     set 
     { 
      this.styleField = value; 
     } 
    } 

    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public bookGenre genre 
    { 
     get 
     { 
      return this.genreField; 
     } 
     set 
     { 
      this.genreField = value; 
     } 
    } 

    private static System.Xml.Serialization.XmlSerializer Serializer 
    { 
     get 
     { 
      if ((serializer == null)) 
      { 
       serializer = new System.Xml.Serialization.XmlSerializer(typeof(book)); 
      } 
      return serializer; 
     } 
    } 

} 

答えて

2

単にあなたBookクラスの属性から名前空間=を脱ぎます。 コードは

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] 
    [System.SerializableAttribute()] 
    [System.ComponentModel.DesignerCategoryAttribute("code")] 
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://tempuri.org/SampleBooks.xsd")] 
    [System.Xml.Serialization.XmlRootAttribute(IsNullable = false)] 
    public partial class book 
+0

のようになります。ありがとうDipesh、それは宝石のように働いた。 :) –

関連する問題