Roger Tranchez Ответов: 1

Десериализация пустых XML-тегов в C# с помощью перечислений


Привет,

(* Я использую LinqPad для проверки этого, поэтому вы можете увидеть вызов .Dump() в конце моего примера)

В этом коде я получаю "ошибка проверки экземпляра:" не является допустимым значением для claves_sexo", потому что оно пустое:

void Main()
{
  string xmlString = "<Products><Product><Id>1</Id><Name>My XML product</Name><Sexo></Sexo></Product></Products>";

  XmlSerializer serializer = new XmlSerializer(typeof(List<Product>), new XmlRootAttribute("Products"));

  StringReader stringReader = new StringReader(xmlString);

  List<Product> productList = (List<Product>)serializer.Deserialize(stringReader);

  productList.Dump();

}

public class Product
{
	public int Id { get; set; }
	public string Name { get; set; }
	
	public claves_sexo Sexo {get;set;}
}

public enum claves_sexo
{
	HO,
	MU,
	ND
}


Я бы хотел, чтобы члену Sexo продукта было присвоено значение ND = 2 для перечисления, когда он не информирован.

Заранее спасибо,

Роджер

Что я уже пробовал:

Я играл с атрибутом XmlIgnore и создал еще один элемент, чтобы импортировать значение пустого тега в виде строки и назначить его члену Sexo, но мне это не удалось.

1 Ответов

Рейтинг:
4

#realJSOP

Я написал методы расширения, чтобы возвращать значение по умолчанию, если элемент не существует. Прочитайте эту статью, СР : Загрузки: SQLXAgent - задания для SQL Express - Часть 1 из 6[^]

и прокрутите вниз до SqlxCommon\FileExtensions, и ищите ExtendLinqToXML.cs

Кстати, я обычно не использую встроенные средства сериализации .Net, потому что хочу больше контролировать то, что происходит. Да, это может быть хлопотно, но Ну, ты же знаешь.


Roger Tranchez

Спасибо за ваш ответ; в любом случае, я применю самое простое решение, которое я нашел здесь, чтобы избежать изменения слишком большого количества существующего кода:
https://stackoverflow.com/questions/55658526/deserializing-empty-xml-tags-in-c-sharp-with-enumerations/55660275#55660275