c#DataContract反序列化Xml不起作用

c#DataContract反序列化Xml不起作用,c#,xml,deserialization,C#,Xml,Deserialization,我有一个包含数据的测试xml文件,并使用适当的属性设置我的对象。我没有收到任何错误,但是在反序列化之后,没有任何对象返回数据。谢谢你的帮助 [DataContract(Name = "level1", Namespace = "")] public class Level1 { [DataMember(Name = "level2")] public Level2 Level2{get;set;} } [DataContract(Name = "level2", Namespace = "")]

我有一个包含数据的测试xml文件,并使用适当的属性设置我的对象。我没有收到任何错误,但是在反序列化之后,没有任何对象返回数据。谢谢你的帮助

[DataContract(Name = "level1", Namespace = "")]
public class Level1
{
[DataMember(Name = "level2")]
public Level2 Level2{get;set;}
}
[DataContract(Name = "level2", Namespace = "")]
public class Level2
{
[DataMember(Name = "code")]
public string Code{get;set;}
[DataMember(Name = "global")]
public string Global{get;set;}
}


//Desrilizing Data
DataContractSerializer dcs = new DataContractSerializer(typeof(Level1));
            FileStream fs = new FileStream("ExampleData/Example.xml", FileMode.OpenOrCreate);
            XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
 Level1 p = (Level1)dcs.ReadObject(reader);//Coming back but with no values


XML
<?xml version="1.0" encoding="utf-8" ?>
<level1>
    <level2 code="332443553" global="21332"/>
</level1>
[DataContract(Name=“level1”,Namespace=”“)]
公营一级
{
[DataMember(Name=“level2”)]
公共Level2 Level2{get;set;}
}
[DataContract(Name=“level2”,Namespace=”“)]
公营二级
{
[DataMember(Name=“code”)]
公共字符串代码{get;set;}
[DataMember(Name=“global”)]
公共字符串全局{get;set;}
}
//去钻孔数据
DataContractSerializer dcs=新的DataContractSerializer(typeof(Level1));
FileStream fs=newfilestream(“ExampleData/Example.xml”,FileMode.OpenOrCreate);
XmlDictionaryReader阅读器=
CreateTextReader(fs,新的XmlDictionaryReaderQuotas());
level1p=(Level1)dcs.ReadObject(reader)//回来了,但没有价值
XML

级别2的属性应该是xml元素,而不是xml属性:

<?xml version="1.0" encoding="utf-8" ?>
<level1>
    <level2>
        <code>332443553</code>
        <global>21332</global>
     </level2>
</level1>
编辑

要使用属性反序列化,必须使用
XmlSerializer
而不是
DataContractSerializer
,如上注释所述:

// Attribute on Property
[DataMember(Name = "code"), XmlAttribute]
public string Code{ get; set; }

// ...

// Deserialization
XmlSerializer serializer = new XmlSerializer(typeof(Level1));
// ...
Level1 p = (Level1)serializer.Deserialize(reader);

我希望反序列化而不是序列化,这个例子非常适合序列化对象。但我收到了这些xml数据,并希望将其反序列化为一个对象,我知道,如果是序列化或反序列化,则在这里是外围的。重要的是
DataContract
API不支持属性。您必须使用实现
ISerializable
的类,或者使用
XmlSerializer
。WCF中默认使用的数据协定序列化程序不支持XML属性(出于性能原因,正如我前面提供的链接中所注释的那样)。XML就是这样来的,我需要将对象更改为什么来解决这个问题?这是可以解决的,请参阅上面@jaroslaw waliszkoSo的评论,是否在类Level1的属性Level2上放置了XmlElement属性?