1

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

这是我正在使用的代码

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

1 回答 1

1

我认为最简单的方法是为序列化添加一个单独的属性(它甚至可以是私有的)。在此属性中,您可以返回要序列化的字符串(不带控制字符)。

例如:

[DataContract]
public class MyClass 
{
    public string MyProperty { get; set; }

    [DataMember]
    private string MyPropertyForSerialization
    {
        get 
        {
            return RemoveControlCharacters(this.MyProperty);
        }
        set
        {
            this.MyProperty = value;
        }
    }
}

请注意,MyProperty没有用属性标记 -而是用属性标记。DataMemberMyPropertyForSerialization

该代码还假定您有一个 RemoveControlCharacters 方法,该方法可以从指定的字符串中删除控制字符。

于 2012-05-16T08:09:55.243 回答