Это заметка для моего будущего «я» и для других. Описанная behavoir не очевидно ...C# XmlSerializer терпит неудачу при десериализации пустого списка перечислений, если он находится в xmlattribute
Я получил это немного C#:
public enum Choices
{
One,
Two,
Three,
}
public class Element
{
List<Choices> _allowedChoices;
[XmlAttribute]
public List<Choices> AllowedChoices
{
get {return _allowedChoices ?? (_allowedChoices = new List<Choices>());}
set { _allowedChoices = value; }
}
}
[Test]
public void testing_empty_enum_list_serialization()
{
var ser = new XmlSerializer(typeof (Element));
using (var sw = new StringWriter())
{
ser.Serialize(sw, new Element
{
AllowedChoices = {},
});
var text = sw.ToString();
Console.WriteLine(text);
using (var sr = new StringReader(text))
{
var deserialized = (Element) ser.Deserialize(sr);
}
}
}
Если я использую XmlSerializer для сериализации это XML, я получаю:
(Обратите внимание, пустое AllowedChoices атрибут в конце)
<?xml version="1.0" encoding="utf-16"?>
<Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" AllowedChoices="" />
Если я затем использовать XmlSerializer для десериализации этого XML я что-то вроде:
System.InvalidOperationException : There is an error in XML document (2, 109).
----> System.InvalidOperationException : Instance validation error: '' is not a valid value for Choices.
Это пустой лист из перечислений, сериализуемые без ошибок, Y U NO Deserialize !?