gpt4 book ai didi

c# - XML 序列化和空集合

转载 作者:行者123 更新时间:2023-11-30 13:09:01 25 4
gpt4 key购买 nike

我有一个属性定义为:

[XmlArray("delete", IsNullable = true)]
[XmlArrayItem("contact", typeof(ContactEvent)),
XmlArrayItem("sms", typeof(SmsEvent))]
public List<Event> Delete { get; set; }

如果List<>删除没有项

<delete />

被发出。如果List<> Delete设置为null

<delete xsi:nil="true" />

被发出。如果集合没有项目,是否有一种方法可以使用属性使删除元素不被发出?

Greg - 非常感谢,我什至没有阅读 IsNullable 文档,只是假设它表示不需要它。

Rob Cooper - 我试图避免 ISerializable,但 Gregs 的建议有效。我确实遇到了您在 (1) 中概述的问题,如果集合的长度为零,我会通过返回 null 来破坏一堆代码。为了解决这个问题,我创建了一个 EventsBuilder 类(我正在序列化的类称为 Events),它管理 Events 类的底层对象的所有生命周期/创建,该类将我们的 Events 类吐出以进行序列化。

最佳答案

我遇到了同样的问题,如果字段为空或 0,我不想输出元素。输出的 XML 无法使用 xsi:null="true"(设计使然)。

我在某处读到,如果您包含一个与您要控制的字段同名但附加了“Specified”的 bool 类型的属性,XMLSerializer 将检查该属性的返回值以确定是否相应应包括字段。

要在不实现 IXMLSerializer 的情况下实现此目的:

public List<Event> Delete { get; set; }
[XMLIgnore]
public bool DeleteSpecified
{
get
{
bool isRendered = false;
if (Delete != null)
{
isRendered = (Delete.Count > 0);
}

return isRendered;
}
set
{
}
}

关于c# - XML 序列化和空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com