Использование Jsonserializer с MemoryMappureViewStream "'0x00' является недействительным после одного значения JSON".C#

Место общения программистов C#
Ответить
Anonymous
 Использование Jsonserializer с MemoryMappureViewStream "'0x00' является недействительным после одного значения JSON".

Сообщение Anonymous »

Я передаю данные между процессами, используя картированные файлы памяти. Оба процесса являются приложениями .NET 6.0, которые совместно используют класс данных. Я сериализовал данные с использованием BinaryFormatter в течение многих лет, но теперь работаю над тем, чтобы заменить их по мере его установления установления. Я пытаюсь сериализовать данные с помощью system.text.json.jsonserializer вместо этого. Пример класса: < /p>

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

[Serializable]
public class SimpleDataSource
{
public string Name { get; set; }
public DateTime Date { get; set; }
public int Number { get; set; }
}
Использование MemoryMappedViewStream с Jsonserializer не работает. В качестве теста я просто сериализую объект, а затем покинул его обратно в другой экземпляр: < /p>

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

string dataFilePath = Guid.NewGuid().ToString();
using (MemoryMappedFile dataFile = MemoryMappedFile.CreateNew(dataFilePath, 104857600, MemoryMappedFileAccess.ReadWrite))
using (MemoryMappedViewStream dataStream = dataFile.CreateViewStream())
{
SimpleDataSource original = new SimpleDataSource
{
Name = "Example Name",
Date = new DateTime(1999, 12, 31),
Number = 191
};

JsonSerializer.Serialize(dataStream, original);
dataStream.Seek(0, SeekOrigin.Begin);

SimpleDataSource deserialized = JsonSerializer.Deserialize(dataStream);
}
< /code>
Это бросает следующее исключение при десериализации: < /p>

system.text.json.jsonexception: '0x00' является недействительным после единого значения JSON. Ожидаемый конец данных. Путь: $ | Линевое блюдо: 0 | BytePositionInline: 65. 

Эта ошибка уникальна для MemoryMapedViewStream 
. Если я заменяю dataStream в примере простой MemoryStream он десериализируется без проблем.

Подробнее здесь: https://stackoverflow.com/questions/772 ... fter-a-sin
Ответить

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

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

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

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

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