私のデータ エンティティにはディクショナリが含まれていますが、XmlSerializer はそのままではそれらをサポートしていません。そこで、DataContractSerializer を使用することにしました。問題は、必要に応じて動作させることができないことです。
私は次のコードから始めました:
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
using (var stm = new XmlTextWriter(writer))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
"\r\n" を文字列に入れると、XML エンティティにシリアル化されないことに気付くまでは、問題なく動作しているように見えました。XmlSerializer の経験から、NewLineHandling = NewLineHandling.Entitize を使用して XmlWriterSettings を設定できることがわかりました。そこで、コードを次のように変換しました。
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
{
using (var stm = XmlWriter.Create(writer,
new XmlWriterSettings()
{
NewLineHandling = NewLineHandling.Entitize
}))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
}
問題は、空の文字列を取得することです。例外はなく、何もありません - 空の文字列だけです。stm 変数は XmlWellFormedWriter を保持します。たぶん、DataContractSerializer でサポートされていないのでしょうか?
次に、次のように XmlTextWriter を強制しようとしました。
public static string SerializeObject<T>(T serialisable)
{
var serializer = new DataContractSerializer(serialisable.GetType());
using (var writer = new StringWriter())
using (var stm = XmlWriter.Create(new XmlTextWriter(writer),
new XmlWriterSettings()
{
NewLineHandling = NewLineHandling.Entitize
}))
{
serializer.WriteObject(stm, serialisable);
return writer.ToString();
}
}
そして、これで最初の場所に戻ります。XML 文字列が返されますが、"\r\n" 文字列はエンティティに変換されません。
改行をエンティティ化し、XML を文字列として返すように DataContractSerializer を作成するにはどうすればよいですか?