XML 序列化 - 消除空值元素
XML Serialization - Eliminate null value elements
这是我的 class.
public class Class1
{
private int? intValue;
public int? IntValue
{
get { return intValue; }
set { intValue = value; }
}
bool ShouldSerializeIntValue()
{
return IntValue != null;
}
private string stringValue;
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
bool ShouldSerializeStringValue()
{
return StringValue != null;
}
private decimal? decimalValue;
public decimal? DecimalValue
{
get { return decimalValue; }
set { decimalValue = value; }
}
bool ShouldSerializeDecimalValue()
{
return DecimalValue != null;
}
}
}
这是我的XML序列化代码
private string ToXml(object model)
{
if (model != null)
{
XmlSerializer Serializer = new XmlSerializer(model.GetType());
XmlSerializerNamespaces NameSpaces = new XmlSerializerNamespaces();
NameSpaces.Add("", "");
StringWriter Writer = new StringWriter();
XmlWriterSettings Settings = new XmlWriterSettings();
using (XmlWriter XmlWriter = XmlWriter.Create(Writer))
{
Serializer.Serialize(XmlWriter, model, NameSpaces);
}
return Writer.ToString();
}
else return null;
}
当我尝试使用 null int 值进行序列化时,它是这样序列化的。
<?xml version="1.0" encoding="utf-16"?><Class1><IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /><StringValue>Int value is null.</StringValue><DecimalValue>456.789</DecimalValue></Class1>
所以不要像这样序列化
<IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
我想在序列化期间消除整个元素,当它为 null 时。
我看到有类似的问题,但我不确定这个特定的 class 有什么问题,因为它总是如上所示序列化,而我确实有 "ShouldSerialize" 函数。
如何实现?有什么想法吗?
您应该将 ShouldSerialize{PropertyName} 方法标记为 public
public bool ShouldSerializeIntValue()
{
return IntValue != null;
}
这是我的 class.
public class Class1
{
private int? intValue;
public int? IntValue
{
get { return intValue; }
set { intValue = value; }
}
bool ShouldSerializeIntValue()
{
return IntValue != null;
}
private string stringValue;
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
bool ShouldSerializeStringValue()
{
return StringValue != null;
}
private decimal? decimalValue;
public decimal? DecimalValue
{
get { return decimalValue; }
set { decimalValue = value; }
}
bool ShouldSerializeDecimalValue()
{
return DecimalValue != null;
}
}
}
这是我的XML序列化代码
private string ToXml(object model)
{
if (model != null)
{
XmlSerializer Serializer = new XmlSerializer(model.GetType());
XmlSerializerNamespaces NameSpaces = new XmlSerializerNamespaces();
NameSpaces.Add("", "");
StringWriter Writer = new StringWriter();
XmlWriterSettings Settings = new XmlWriterSettings();
using (XmlWriter XmlWriter = XmlWriter.Create(Writer))
{
Serializer.Serialize(XmlWriter, model, NameSpaces);
}
return Writer.ToString();
}
else return null;
}
当我尝试使用 null int 值进行序列化时,它是这样序列化的。
<?xml version="1.0" encoding="utf-16"?><Class1><IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /><StringValue>Int value is null.</StringValue><DecimalValue>456.789</DecimalValue></Class1>
所以不要像这样序列化
<IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
我想在序列化期间消除整个元素,当它为 null 时。
我看到有类似的问题,但我不确定这个特定的 class 有什么问题,因为它总是如上所示序列化,而我确实有 "ShouldSerialize" 函数。
如何实现?有什么想法吗?
您应该将 ShouldSerialize{PropertyName} 方法标记为 public
public bool ShouldSerializeIntValue()
{
return IntValue != null;
}