C# 反序列化来自不同元素的同名xml属性

C# 反序列化来自不同元素的同名xml属性,c#,xml,deserialization,C#,Xml,Deserialization,我开始研究XML(反)序列化,我正在努力反序列化以下XML <?xml version="1.0" encoding="utf-8" ?> <Reader> <NewRecord value ="HH"/> <FileTerminator value ="HHProgram"/> <OutputFont value ="Courier"/> </Reader> 我在引用每个元素的正确值属性时遇到了问题,下面的X

我开始研究XML(反)序列化,我正在努力反序列化以下XML

<?xml version="1.0" encoding="utf-8" ?>
<Reader>
  <NewRecord value ="HH"/>
  <FileTerminator value ="HHProgram"/>
  <OutputFont value ="Courier"/>
</Reader>
我在引用每个元素的正确值属性时遇到了问题,下面的XML按预期工作

<?xml version="1.0" encoding="utf-8" ?>
<LayoutReader>
  <NewRecord>HH</NewRecord>
  <FileTerminator>HHProgram</FileTerminator>
  <OutputFont>Courier</OutputFont>
</LayoutReader>

嗯
hh程序
信使

尝试使用此代码,它会按照您的预期工作。也可以用同样的方法添加其他属性

public class Reader
{
    ...
    [XmlElement("OutputFont")]
    public ReaderItemOutputFont ReaderItem { get; set; }
}


[Serializable()]
public class ReaderItemOutputFont
{
    [XmlAttribute("value")]
    public String OutputFont { get; set; }
}
这对我有用-

[XmlRoot]
public class Reader
{
    [XmlElement]
    public NewRecord NewRecord;

    [XmlElement]
    public FileTerminator FileTerminator;

    [XmlElement]
    public OutputFont OutputFont;
}

public class NewRecord
{
    [XmlAttribute]
    public string value;

}

public class FileTerminator
{
    [XmlAttribute]
    public string value;

}

public class OutputFont
{
    [XmlAttribute]
    public string value;
}


var t = o.Deserialize("xml"); // works

后者无需调整即可工作,因为其中有元素的值
[XmlRoot]
public class Reader
{
    [XmlElement]
    public NewRecord NewRecord;

    [XmlElement]
    public FileTerminator FileTerminator;

    [XmlElement]
    public OutputFont OutputFont;
}

public class NewRecord
{
    [XmlAttribute]
    public string value;

}

public class FileTerminator
{
    [XmlAttribute]
    public string value;

}

public class OutputFont
{
    [XmlAttribute]
    public string value;
}


var t = o.Deserialize("xml"); // works