2012年10月26日金曜日

.NET シリアライズしたファイルをデシリアライズした際、改行が読み込まれない

シリアライズしたファイルをデシリアライズで読み込んだ際に改行が読み込まれない問題

あほxのまとめwiki XmlSerializerの改行の扱いについてによると
改行がCRLFのStringをXmlSerializer.Serializeでシリアライズして保存すると、ファイルには改行がCRLFのまま保存されるが、
デシリアライズする際に
ファイルをStreamReaderでXmlSerializer.Deserializeに渡すと改行がLFになる。
ファイルをXmlTextReaderでXmlSerializer.Deserializeに渡すと改行がCRLFになる。

ほぉ~そ~なのか!

シリアライズ
Dim hoge As New Hoge
Using writer As New System.Xml.XmlTextWriter(path, System.Text.Encoding.GetEncoding("UTF-8"))
    Try
        Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Hoge))
        serializer.Serialize(writer, hoge)
    Finally
        writer.Close()
    End Try
End Using
デシリアライズ
Dim hoge As Hoge
Using reader As New System.Xml.XmlTextReader(path)
    Try
        Dim serializer As New System.Xml.Serialization.XmlSerializer(GetType(Hoge))
        Dim obj As Object = serializer.Deserialize(reader)
        hoge = CType(obj, Hoge)
    Finally
        reader.Close()
    End Try
End Using

0 件のコメント: