Дополнительные атрибуты сериализатора .NET Xml

#c# #.net #xml #xml-serialization

#c# #.net #xml #xml-сериализация

Вопрос:

Дан следующий код…

 [XmlType("Field")]
public class SearchField
{
    [XmlAttribute("alias")]
    public string Alias;

    [XmlAttribute("entity")]
    public string Entity;
}
 

Псевдоним является необязательным полем для нас, но десериализатор выдает, когда атрибут «alias» отсутствует в xml. Как сделать это необязательным? Требуется ли схема?

Ответ №1:

Странно, потому что следующая программа отлично работает для меня, без каких-либо метаний:

 using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

[XmlType("Field")]
public class SearchField
{
    [XmlAttribute("alias")]
    public string Alias;

    [XmlAttribute("entity")]
    public string Entity;
}

class Program
{
    static void Main()
    {
        using (var reader = new StringReader("<Field entity="en" />"))
        {
            var serializer = new XmlSerializer(typeof(SearchField));
            var s = (SearchField)serializer.Deserialize(reader);
            Console.WriteLine(s.Alias);
            Console.WriteLine(s.Entity);
        }
    }
}
 

Как вы можете видеть alias , атрибут отсутствует во входном XML, и все же десериализация не вызывает проблем.