При десериализации XML из файла, отображенного в памяти, как я могу исправить «SerializationException: данные на корневоC#

Место общения программистов C#
Anonymous
При десериализации XML из файла, отображенного в памяти, как я могу исправить «SerializationException: данные на корнево

Сообщение Anonymous »

При десериализации XML из файла, отображенного в памяти, я получаю сообщение об ошибке ниже при вызове DataContractSerializer.ReadObject():

System.Runtime .Serialization.SerializationException: 'Произошла ошибка при десериализации объекта типа SampleClass. Данные на корневом уровне недействительны. Строка 1, позиция 1.

Ранее я записал XML в файл с помощью DataContractSerializer, поэтому он должен быть действительным. Как это исправить?
Добавляю пример кода ниже:

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

using System.IO.MemoryMappedFiles;
using System.Runtime.Serialization;
using System.Runtime.Versioning;

namespace TestMigration
{
public class Program
{
[SupportedOSPlatform("windows")]
public static void Main(string[] args)
{
using (var mmf = MemoryMappedFile.CreateNew("TempName", 10240, MemoryMappedFileAccess.ReadWrite))
{
WriteToMemoryMappedFile(mmf);

var infoObj = ReadFromMemoryMappedFile(mmf);

Console.WriteLine(infoObj?.Name);
}

}
private static void WriteToMemoryMappedFile(MemoryMappedFile mmf)
{
var serializer = new DataContractSerializer(typeof(SampleClass));

var infoObj = new SampleClass { Name = "TestApp" };

using (var stream = mmf.CreateViewStream(0, 0, MemoryMappedFileAccess.Write))
{
serializer.WriteObject(stream, infoObj);
stream.Flush();
}
}

private static SampleClass? ReadFromMemoryMappedFile(MemoryMappedFile mmf)
{
var serializer = new DataContractSerializer(typeof(SampleClass));

using (var stream = mmf.CreateViewStream(0, 0, MemoryMappedFileAccess.Read))
{
stream.Position = 0;
return (SampleClass?)serializer.ReadObject(stream);
}
}
}
}

[DataContract]
public class SampleClass
{
[DataMember]
public string? Name { get; set; }
}

Пожалуйста, не отмечайте это как дубликат. Я пробовал добавлять обходные пути, такие как использование XmlReader, XmlDictionaryReader и т. д., как предлагалось в других вопросах, но ничего не вышло.

Подробнее здесь: https://stackoverflow.com/questions/790 ... lizationex

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