如何使用默认命名空间反序列化xml?

我试图反序列化由其中一个内部系统生成的Atom xml。 但是,当我尝试:

public static MyType FromXml(string xml) { XmlSerializer serializer = new XmlSerializer(typeof(MyType )); return (MyType) serializer.Deserialize(new StringReader(xml)); } 

它会在命名空间的定义上抛出exception:

 System.InvalidOperationException:  was not expected. 

当我将命名空间添加到XmlSerializer的构造函数时,我的对象是完全空的:

  public static MyType FromXml(string xml) { XmlSerializer serializer = new XmlSerializer(typeof(MyType ), "http://www.w3.org/2005/Atom"); return (MyType) serializer.Deserialize(new StringReader(xml)); //this will return an empty object } 

任何想法如何让它工作?

如果不能看到你的对象模型与xml的关系(即每个的样本),很难对此进行调查; 但是,你应该能够做到这样的事情:

 [XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")] public class MyType {...} 

作为一个有限的primefaces示例(它与一些样本primefaces一起使用,我有“手”):

 class Program { static void Main() { string xml = File.ReadAllText("feed.xml"); XmlSerializer serializer = new XmlSerializer(typeof(MyType)); var obj = (MyType)serializer.Deserialize(new StringReader(xml)); } } [XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")] public class MyType { [XmlElement("id")] public string Id { get; set; } [XmlElement("updated")] public DateTime Updated { get; set; } [XmlElement("title")] public string Title { get; set; } } 

您可以通过将此序列化添加到app.config来调试XML序列化

      

在temp-folder中,会生成序列化程序的C#文件,您可以在VS中打开它们进行调试。

还可以查看XmlNamespaceManager (即使是默认名称空间)。