Поток только для записи — получите количество записанных байт с помощью DataContractSerializer.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Поток только для записи — получите количество записанных байт с помощью DataContractSerializer.

Сообщение Anonymous »

Предположим, у меня есть следующий фрагмент:

Код: Выделить всё

public void Store(Stream s, object t)
{
var serializer = new DataContractSerializer(target.GetType(),
new DataContractSerializerSettings
{
PreserveObjectReferences = true
});

serializer.WriteObject(s, target);
}
где s — только для записи и не поддерживает поиск.

Есть ли способ получить количество байтов, записанных в поток с помощью WriteObject? Я знаю, что могу сделать это следующим образом:

Код: Выделить всё

using (var memStream = new MemoryStream())
{
serializer.WriteObject(serializer, target);
Debug.WriteLine(memStream.Length);
memStream.CopyTo(s);
}
но интересно, можно ли избежать CopyTo — объект довольно большой.

РЕДАКТИРОВАТЬ:
Мне только что пришла в голову идея: я могу создать оболочку, которая подсчитывает байты при записи. Это лучшее решение, настолько жирное, но, возможно, есть другой способ.

СДЕЛАНО

Я реализовал обертку: https://github.com/pwasiewicz/counted-stream — возможно, кому-то будет полезно.

Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/303 ... serializer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»