XmlSerializer Преобразует переводы строки - PullRequest
1 голос
/ 26 февраля 2011

Я пытаюсь сериализовать объект в память, передать его другому процессу в виде строки и десериализовать его.

Я обнаружил, что процесс сериализации 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);
}

Как я могу сериализовать объект без сериализации его на диск, как это, но без искажения строк в строках?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2011

Ответ пришел из другого поста ТАК, но я публикую его здесь, потому что мне пришлось немного его подправить.

Мне пришлось создать новый класс для управления потоком чтения / записи XML в память.Вот оно:

</p> <pre><code>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 голосов
/ 26 февраля 2011

Строки должны быть обернуты в секции CDATA для сохранения новых строк.

...