如果标记之间有字符串,则通过在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);
谢谢你的帮助!
您已经用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文件或删除该属性。您的呼叫