如果在标记之间使用字符串,则通过在C#中反序列化来获取null

时间:2013-08-18 08:44:29

标签: c# xml deserialization xmlserializer

我需要一些帮助,如果我将两个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始终为null!

要读出XML文件,我使用以下内容:

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

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

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您已使用entryString属性修饰XmlElement,该属性将在Bits内搜索元素Bits

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

所以改变这个

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

[XmlText]
public String entryString { get; set; }

答案 1 :(得分: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文件或删除该属性。你的电话