1

オブジェクトのリストを XML にシリアル化するために DataContractSerializer を使用しています。オブジェクトのプロパティのデータはデータベースから取得され、データベースの列には 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 に答える