如何使用XmlSerializer类反序列化这个简单的xml配置?

如何使用XmlSerializer类反序列化这个简单的xml配置?,xml,xml-serialization,xsd.exe,Xml,Xml Serialization,Xsd.exe,我想将以下xml反序列化到一个类中 <?xml version="1.0" encoding="utf-8" ?> <root> <element1>String1</element1> <element2>String2</element2> </root> 当我尝试使用以下代码对其进行反序列化时,config对象被实例化,但字符串为null 使用TextReader=new StreamReader

我想将以下xml反序列化到一个类中

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <element1>String1</element1>
  <element2>String2</element2>
</root>
当我尝试使用以下代码对其进行反序列化时,config对象被实例化,但字符串为null

使用TextReader=new StreamReader配置文件 { XmlSerializer serializer=新的XmlSerializertypeofroot; this.config=rootserializer.Deserializereader; }
我曾尝试使用xsd.exe创建一个xsd,然后在此基础上创建一个类,但该工具产生了太多的混乱。我想我离这里很近了。我遗漏了什么?

您不能序列化/反序列化内部属性-它们必须是公共的。

我同意Brody关于您问题的本质的看法。但是,您可能反对公开这些字段。我过去处理这个问题的方法是创建一个可序列化的类,它的唯一目的是读/写.xml,并且它的所有字段都是公共的。然后创建一个新类作为外部接口。它将可序列化类作为构造函数的参数,外部类提供控制对可序列化类的访问的公共属性。

要继续我的实现。。。我最终放弃了同时使用XmlSerializer类。我反序列化的类非常复杂,包含需要序列化的其他对象的列表。我必须添加到类中的属性数量使得

我最终使用Linq to XML来进行反序列化。。。。类Delcaration的复杂性降低了,但linq语句变得相当复杂

如果我再做一次,我可能会考虑使用WCF和datacontract序列化程序。。。这可能也很难做到

我很好奇现在人们是如何将xml文档反序列化为对象的。在了解了Linq的声明之后,我认为这可能是一条出路。对象的创建要简单得多,而且它们不需要是公共的。XmlSerializer似乎是老派,而LinqtoXML更像是新派


我很想听听其他人怎么说。

您可以使用XSD.exe从XSD XML模式定义生成一个类。这将生成一个可用的类结构,可以序列化和反序列化相关的XML