Ошибка XmlSerializer при десериализации в XElement в Blazor WebAssemblyC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка XmlSerializer при десериализации в XElement в Blazor WebAssembly

Сообщение Anonymous »

У меня есть веб-проект Blazor, с которым возникла проблема при публикации на тестовом сервере. Все работало при работе в VS2026. Я открываю документ XML через поток и десериализую его в объект Property. Одним из свойств является объект карты, содержащий данные KML. Я просто хочу, чтобы это был XElement, по которому я мог бы пройти, вместо того, чтобы пытаться создать тип данных KML. (Усеченный) XML выглядит следующим образом: И класс, в который я десериализую:

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

[XmlRoot]
public class Property
{
// Other properties omitted.

[XmlElement("PropertyMap")]
public PropertyMap Map { get; set; }
}

public class PropertyMap
{
public XElement? KML { get; set;}
}
И наконец, я десериализую его следующим образом:

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

XmlSerializer serializer = new XmlSerializer(typeof(Property));
Property? property = (Property?)serializer.Deserialize(fileStream);
Когда я публикую это в IIS и запускаю его в режиме рендеринга WebAssembly, я получаю следующую ошибку:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]

Необработанный компонент рендеринга исключений: XmlTypeReflectionError, Property

System.InvalidOperationException: XmlTypeReflectionError, Property

---> System.InvalidOperationException: XmlPropertyReflectionError, Map

---> System.InvalidOperationException: XmlTypeReflectionError, PropertyMap

---> System.InvalidOperationException: XmlSerializerUnsupportedMember, PropertyMap.KML, System.Xml.Linq.XElement

---> System.InvalidOperationException: XmlConstructorInaccessible, System.Xml.Linq.XElement

Exception_EndOfInnerExceptionStack

Если я переключу приложение на использование режима рендеринга сервера, десериализация работает нормально. Когда я запускаю его из Visual Studio, используя WebAssembly или Server, он работает. При публикации с использованием WebAssembly возникают ошибки.
Я пробовал публиковать с использованием как -c Release, так и -c Debug, но это не имеет значения, та же ошибка. Я предполагаю, что это связано с тем, что у XElement нет общедоступного конструктора без параметров, но в таком случае почему десериализация работает в других сценариях?
Вкратце:
Работает в VS2026 как с Blazor Server, так и с WebAssembly.
Не работает при публикации (ни в IIS, ни в прямом запуске Kestrel) в Blazor WebAssembly. (Выпуск или отладка)
Полный пример можно найти здесь: https://github.com/valuator18/BlazorXml

Подробнее здесь: https://stackoverflow.com/questions/798 ... ebassembly
Ответить

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

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

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

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

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