如果标记之间有字符串,则通过在C#中从XML反序列化获得null

本文关键字:中从 XML 反序列化 null 之间 字符串 如果 | 更新日期: 2023-09-27 18:28:08

我需要一些帮助,如果我要反序列化两个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);

谢谢你的帮助!

如果标记之间有字符串,则通过在C#中从XML反序列化获得null

您已经用XmlElement属性修饰了entryString,该属性将在Bits本身内部搜索元素Bits

但您需要Bits元素的内部文本。为此,我们有另一个属性XmlText

所以改变这个

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

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

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

[XmlElement(ElementName = "Bits")]

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

<?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文件或删除该属性。您的呼叫