2

我需要一些帮助,如果我要反序列化两个 xml 标签之间的字符串,我总是会得到 null。

以下示例 xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
 <item name='First Item' size='1'>
   <Bits value='0'>
     1st String
   </Bits>
   <Bits value='1'>
     2nd String
   </Bits>
 </item>

我写了以下课程:

[Serializable()]
public class Bits
{
    [XmlElement(ElementName = "Bits")]
    public String entryString { get; set; }
    [XmlAttribute("value")]
    public int entryValue { get; set; }
}


[Serializable()]
[XmlRoot("item")]
public class itemsReader
{
    public itemsReader()
    {
        _bitList = new List<Bits>();
    }
    [XmlElement("Bits")]
    public List<Bits> _bitList { get; set; }

    [XmlAttribute("name")]
    public String entryName { get; set; }
    [XmlAttribute("size")]
    public int entrySize { get; set; }
}

只有 entryString 始终为空!

要读出 XML 文件,我使用以下命令:

    itemsReader ireader = null;
    String path = @"PathtoString";

    XmlSerializer serializer = new XmlSerializer(typeof(itemsReader));

    var reader = File.OpenText(path);
    ireader = (itemsReader)serializer.Deserialize(reader);

感谢帮助!

4

2 回答 2

3

您已经使用属性进行了装饰entryString,该属性将在 Bits 本身中XmlElement搜索元素。Bits

但是你想要Bits元素的内部文本。为此,我们有另一个名为XmlText.

所以改变这个

[XmlElement(ElementName = "Bits")]
public String entryString { get; set; }

[XmlText]
public String entryString { get; set; }
于 2013-08-18T09:29:05.213 回答
0

我在你的输入上运行了你的代码并得到了输出,但是我在Bits课堂上看到该属性entryString有一个属性

[XmlElement(ElementName = "Bits")]

但在您的 xml 文件中没有<Bits>标签1st String。所以我添加了它们并得到:

<?xml version="1.0"?>
<item name="First Item" size="2">
  <Bits value="1">
    <Bits>firstOne</Bits>
  </Bits>
  <Bits value="2">
    <Bits>secOne</Bits>
  </Bits>
</item>

然后你的代码工作了

因此您可以更改 xml 文件或摆脱该属性。你的来电

于 2013-08-18T08:59:37.630 回答