【发布时间】:2021-11-29 13:25:00
【问题描述】:
我对 XmlSerializer 在幕后的工作方式感到困惑。我有一个将 XML 反序列化为对象的类。我看到的是以下两个元素,它们不是被反序列化的 Xml 的一部分。
[XmlRootAttribute("MyClass", Namespace = "", IsNullable = false)]
public class MyClass
{
private string comments;
public string Comments
{
set { comments = value; }
get { return comments; }
}
private System.Collections.Generic.List<string> tests = null;
public System.Collections.Generic.List<string> Tests
{
get { return tests; }
set { tests = value; }
}
}
我们以下面的 XML 为例:
<MyClass>
<SomeNode>value</SomeNode>
</MyClass>
您注意到测试和注释不是 XML 的一部分。
当这个 XML 被反序列化时,Comments 为 null(这是预期的)并且 Tests 是一个计数为 0 的空列表。
如果有人可以向我解释这一点,将不胜感激。我更喜欢的是,如果 XML 中缺少 <Tests>,则列表应保持为空,但如果存在(可能为空)节点 <Tests />,则应分配列表。
【问题讨论】:
-
@gdir 你是说当你序列化这个时你得到一个列表的空值而不是空列表?
-
不,我要问的是,由于测试不是 xml 的一部分,因此在序列化时它应该为 null 而不是空列表。这有意义吗?
-
OP 的问题是关于反序列化而不是序列化。当上面的 XML 被反序列化时,即使
<Tests />从未出现在 XML 中,也会分配tests集合。 (顺便说一句,我可以复制它。) -
编辑反序列化谢谢
-
我不知道有什么地方记录了这种行为。当
<Tests>完全丢失时,您不希望分配列表。当有一个空的<Tests />节点时你想要什么?
标签: c# xml serialization xmlserializer