Необязательные атрибуты сериализатора .NET Xml - PullRequest
7 голосов
/ 02 ноября 2011

Учитывая следующий код ...

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

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

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

1 Ответ

11 голосов
/ 02 ноября 2011

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

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 и все же не вызывает проблем с десериализацией.

...