2011-02-26 17 views
1

オブジェクトをメモリにシリアル化し、別のプロセスに文字列として渡してデシリアライズしようとしています。XmlSerializer改行を変換します。

私は、XMLシリアル化プロセスがオブジェクトの文字列の改行を取り除くことを発見しました。

byte[] b; 
// serialize to memory. 
using (MemoryStream ms = new MemoryStream()) 
{ 
    XmlSerializer xml = new XmlSerializer(this.GetType()); 
    xml.Serialize(ms, this); 
    b = ms.GetBuffer(); 
} 

// I can now send the bytes to my process. 
Process(b); 

// On the other end, I use: 
using (MemoryStream ms = new MemoryStream(b)) 
{ 
    XmlSerializer xml = new XmlSerializer(this.GetType()); 
    clone = (myObject)xml.Deserialize(ms); 
} 

オブジェクトをこのようにディスクにシリアル化せずに直列化するにはどうすればよいですか?文字列に改行をマングリングしないでください。

+0

どの改行が削除されますか? myObjcetの –

+0

には、いくつかの文字列があり、それぞれに改行を入れることができます。 – Jerry

+0

また、シリアル化されているクラスを制御できますか? 2つのプロセスはどちらも.NETを実行していますか?もしそうなら、はるかに良い選択肢があります。 –

答えて

0

答えは別のSO投稿から来ましたが、私は少し調整しなければならなかったので、ここで再掲載しています。

XMLストリームの読み込み/書き込みを管理する新しいクラスを作成する必要がありました。ここでは、次のとおりです。

public class SafeXmlSerializer : XmlSerializer 
{ 
    public SafeXmlSerializer(Type type) : base(type) { } 

    public new void Serialize(StreamWriter stream, object o) 
    { 
     XmlWriterSettings ws = new XmlWriterSettings(); 
     ws.NewLineHandling = NewLineHandling.Entitize; 

     using (XmlWriter xmlWriter = XmlWriter.Create(stream, ws)) 
     { 
      base.Serialize(xmlWriter, o); 
     } 
    } 
} 

それはXmlSerializerをの上に構築されているので、それが期待どおりに振る舞うべき。 StreamWriterを使用してシリアル化するときは、シリアル化の「安全」なバージョンを使用して、頭痛を軽減します。

私はこれが他の人に役立つことを願っています。

0

改行を保存するには、文字列をCDATAセクションで囲む必要があります。

+0

彼はオブジェクトをシリアル化してXMLを生成することに注意してください。文字列をCDATAセクションに_put_する方法を伝える必要があります。 –

関連する問題