【问题标题】:XML serialization of a class in another class另一个类中一个类的 XML 序列化
【发布时间】:2016-04-03 08:43:57
【问题描述】:

这些是我目前正在使用的类。

public class Monster
{
    [XmlAttribute("name")]
    public string Name;
    public int Mana;
    public int Health;
    public List<Drop> Drops;    
}
public class Drop
{
    public string DropInfo;
}

这是 XML:

<Monster name="TestMonster1">
  <Health>5</Health>
  <Mana>2</Mana>
  <Drops>
    <Drop>124 20 40</Drop>
    <Drop>140 15 25</Drop>
    <Drop>155 10 15</Drop>
  </Drops>
</Monster>

我想要做的是将 XML 的每个 &lt;Drop&gt; 添加到 Drop List 中。我尝试了 XmlArray、XmlArrayItem 和 XmlElement 的不同组合,但它们都没有奏效。

目前 Drop 类只有一个字符串,但我需要处理该字符串时它会包含更多,这就是为什么 List&lt;Drop&gt; 不仅仅是一个字符串数组。

有可能吗?我唯一能做的就是让 List 有 3 个正确的项目,但字符串始终为空。

【问题讨论】:

  • 您是否尝试将 [XmlText] 放在 DropInfo 上?
  • 哇,我实际上还没有尝试过,但是是的,它有效!还没有对这些 XML 的东西做过很多,所以它对我来说还是很新的。非常感谢!
  • 我将其添加为答案,以便人们将来可以轻松找到解决方案 :) 很高兴我能提供帮助。

标签: c# xml xml-serialization


【解决方案1】:

您在 DropInfo 中缺少 [XmlText]。没有它,C# 不知道将文本粘贴在 &lt;Drop&gt; 标记中的什么位置:

public class Drop
{
    [XmlText]
    public string DropInfo;
}

【讨论】:

    【解决方案2】:

    尝试使用 ths

        public class Monster
        {
            [XmlAttribute("name")]
            public string Name;
            public int Mana;
            public int Health;
            [XmlArray("Drops")]
            [XmlArrayItem("Drop")]
            public List<Drop> Drops;
        }
    
        public class Drop
        {
            [XmlText]
            public string DropInfo;
        }
    }
    

    看到它在我的 .NET Fiddle 中工作:https://dotnetfiddle.net/HzvVkI

    【讨论】:

    • 嘿,尽管你也是对的,但约翰的回答更早,这就是我接受他的原因!不过还是谢谢。
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多