Я пытался добиться десериализации, как объяснено в этом посте , но безуспешно:
(* Я использую 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 в Product присваивалось значение ND = 2 для перечисления, когда оно не сообщается.
Я играл с атрибутом XmlIgnore и создал еще один элемент, чтобы импортировать значение пустого тега в виде строки и назначить его члену Sexo, но мне это не удалось.
- Меня попросили изменить тип члена Sexo на String, но я не могу изменить тип claves_sexo, поскольку он относится к некоторому установленному стандарту, который мы используем.
ЗАКЛЮЧИТЕЛЬНОЕ Примечание: эта версия, наконец, работает:
void Main()
{
string xmlString = "<Products><Product><Id>1</Id><Name>My XML product</Name><Sexo>ND</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; }
[XmlIgnore]
public claves_sexo Sexo {get;set;}
[XmlElement("Sexo")]
public string SexoAsString
{
get
{
return Sexo.ToString();
}
set
{
if (string.IsNullOrWhiteSpace(value))
{
Sexo = claves_sexo.ND;
}
else
{
Sexo = (claves_sexo)Enum.Parse(typeof(claves_sexo), value);
}
}
}
}
public enum claves_sexo
{
HO,
MU,
ND
}
Спасибо всем!
Роджер