Page 1 of 1

Die Verwendung von JsonSerializer mit MEMAMETMADDViewStream "'0x00' ist nach einem einzelnen JSON -Wert ungültig."

Posted: 05 Sep 2025, 02:59
by Anonymous
Ich überlasse Daten zwischen Prozessen mithilfe von Speicherzuordnungsdateien. Beide Prozesse sind .NET 6.0 -Anwendungen, die eine .dll -enthalten, die die Datenklasse enthalten. Ich hatte die Daten jahrelang mit Binaryformatter serialisiert, arbeite aber jetzt daran, sie zu ersetzen, da sie veraltet sind. Ich versuche stattdessen mit System.text.json.JsonSonializer zu serialisieren. Beispielklasse: < /p>

Code: Select all

[Serializable]
public class SimpleDataSource
{
public string Name { get; set; }
public DateTime Date { get; set; }
public int Number { get; set; }
}
Verwenden von MEMAMETMADDViewStream mit JsonSerializer funktioniert jedoch nicht. Als Test serialisiere ich nur ein Objekt und deserialisiert es dann zu einer anderen Instanz: < /p>

Code: Select all

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>
Dies bringt die folgende Ausnahme nach der Deserialisierung aus: < /p>

System.text.json.jsonexception: '0x00' ist nach einem einzelnen JSON -Wert ungültig. Erwartetes Datenende. Pfad: $ | Leinenumberne: 0 | BytepositionInline: 65.

Dieser Fehler ist eindeutig für majorMappedViewStream 
. Wenn ich DataStream im Beispiel durch einen einfachen Speicherstream ersetze, wird es ohne Ausgabe deserialisiert.