使用DataContractSerializer排除控制字符

时间:2012-05-15 08:59:30

标签: .net serialization datacontractserializer

我正在使用DataContractSerializer将对象列表序列化为XML。对象属性的数据来​​自数据库,数据库中的列可以包含XML中无效的控制字符 有可能以某种方式指示DataContractSerializer自动排除无效的控制字符吗?

这是我正在使用的代码

serializer = new DataContractSerializer(myList.GetType());
using(var ms = new MemoryStream())
{
   serializer.WriteObject(ms, myList);
   return Encoding.UTF8.GetString(ms.ToArray());
}

1 个答案:

答案 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方法,该方法从指定的字符串中删除控制字符。