我想在List中禁用Xml中的空元素。 我知道PropertyNameSpecified模式,但我不知道如何将它应用到列表中。
我有元素列表,正在序列化。其中一些元素是空的,并且在该列表中产生空的Xml元素(我不想要的)。
我的示例代码:
public class ConditionsCollectionModel
{
[XmlElement("forbidden")]
public List<ForbiddenModel> ForbiddenCollection { get; set; }
[XmlElement("required")]
public List<RequiredModel> RequiredCollection { get; set; }
}
public class ForbiddenModel : IXmlSerializable
{
public string Value { get; set; }
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
Value = reader.ReadElementString("forbidden");
}
public void WriteXml(XmlWriter writer)
{
writer.WriteString(Value);
}
}
public class RuleModel
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("conditions")]
public ConditionsCollectionModel Conditions { get; set; }
}
它以如下形式生成Xml:
<rule>
<name>SR</name>
<conditions>
<forbidden />
<forbidden />
<forbidden>Ftest</forbidden>
<required>test</required>
<required>test2</required>
</conditions>
</rule>
我不想在conditions
列表中找到那些空元素。
答案 0 :(得分:1)
问题相当陈旧,但我今天遇到了同样的问题。所以对于阅读这个主题的人来说,这是适合我的解决方案。
添加&#34; ShouldSerialize {PropertyName}&#34;
public class ConditionsCollectionModel
{
[XmlElement("forbidden")]
public List<ForbiddenModel> ForbiddenCollection { get; set; }
[XmlElement("required")]
public List<RequiredModel> RequiredCollection { get; set; }
public bool ShouldSerializeForbiddenCollection(){
return (ForbiddenCollection !=null && ForbiddenCollection.Count>0);
}
请参阅:MSDN
答案 1 :(得分:0)
由于ForbiddenCollection是Forbidden Class的列表,因此您可以在插入List时将空ForbiddenClass对象的值设置为null。