【问题标题】:Deserialize xml attribute with the same name from different elements反序列化来自不同元素的同名xml属性
【发布时间】:2016-02-23 12:46:53
【问题描述】:

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

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

进入下面的类

public class Reader
{
    [XmlElement]
    public string NewRecord;
    [XmlElement]
    public string FileTerminator;
    [XmlElement]
    public string OutputFont;

}

我在引用以下 XML 按预期工作的每个元素的正确值属性时遇到问题。

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

【问题讨论】:

  • 后者无需调整即可工作,因为那里有元素的值

标签: c# xml deserialization


【解决方案1】:

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

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


[Serializable()]
public class ReaderItemOutputFont
{
    [XmlAttribute("value")]
    public String OutputFont { get; set; }
}

【讨论】:

    【解决方案2】:

    这对我有用 -

    [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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多