2013-07-26 104 views
1

当我尝试在XML下反序列化时,出现错误:设置xmlns =''不是预期的。 我在下面的类中映射了根节点,为什么会出现这个错误?反序列化返回null对象c#

我的xml:

<Settings> 
    <Access> 
     <Phone hasTextField="true"> 
      <Item description="CMS" /> 
     </Phone> 
    </Access> 
</Settings> 

类 Settings.cs:

[XmlRoot("Settings")] 
public class AccessNodes 
{ 
    [XmlElement("Access")] 
    public Access AccessList { get; set; } 
} 

[XmlType("Access")] 
public class Access 
{ 
    [XmlElement("Phone")] 
    public AccessItem Phone { get; set; } 
} 

public class AccessItem 
{ 
    public AccessItem() 
    { 
    Items = new List<Item>(); 
    } 

    [XmlAttribute("hasTextField")] 
    public bool HasTextField { get; set; } 

    [XmlElement("Item")] 
    public List<Item> Items { get; set; } 

}

[XmlType("Item")] 
public class Item 
{ 
[XmlAttribute("description")] 
    public string Description { get; set; } 
} 

SettingsReader.cs

public static class SettingsReader<T> 
    { 
     public static T Deserialize(string basePath) 
     { 
      string filename = basePath + ".xml"; 
      T t = default(T); 
      XmlSerializer xs = new XmlSerializer(typeof(T)); 
      using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) 
      { 
       t = (T)xs.Deserialize(fs); 
      } 
      return t; 
    } 

电话SettingsReader.cs

Access access = SettingsReader<Access>.Deserialize(Server.MapPath("~/App_Data/access")); 
+1

你可以发布你的反串行化代码? – Kevin

+2

我刚刚测试过它,它适用于我... –

+0

请向我们展示**完整的错误信息**,而不仅仅是您挑选出来的几个字。 –

回答

1

你试图反序列化错误的元素 - 你试图反序列化Access型,而你的顶级节点是Settings,这是适用于AccessNodes类型名称。

试试这个:

AccessNodes settings = SettingsReader<AccessNodes>.Deserialize(...); 
+0

谢谢,这是问题所在。 –