我正在使用DataContractSerializer将对象列表序列化为XML。对象属性的数据来自数据库,数据库中的列可以包含XML中无效的控制字符 有可能以某种方式指示DataContractSerializer自动排除无效的控制字符吗?
这是我正在使用的代码
serializer = new DataContractSerializer(myList.GetType());
using(var ms = new MemoryStream())
{
serializer.WriteObject(ms, myList);
return Encoding.UTF8.GetString(ms.ToArray());
}
答案 0 :(得分:1)
我认为最简单的方法是为序列化添加一个单独的属性(它甚至可以是私有的)。在此属性中,您可以将字符串返回到序列化(不带控制字符)。
例如:
[DataContract]
public class MyClass
{
public string MyProperty { get; set; }
[DataMember]
private string MyPropertyForSerialization
{
get
{
return RemoveControlCharacters(this.MyProperty);
}
set
{
this.MyProperty = value;
}
}
}
请注意,MyProperty
不标有DataMember
属性 - 而MyPropertyForSerialization
则标有该属性。
该代码还假定您有一个RemoveControlCharacters方法,该方法从指定的字符串中删除控制字符。