【问题标题】:.NET Xml serializer optional attributes.NET Xml 序列化程序可选属性
【发布时间】:2011-11-01 20:53:58
【问题描述】:
给定以下代码...
[XmlType("Field")]
public class SearchField
{
[XmlAttribute("alias")]
public string Alias;
[XmlAttribute("entity")]
public string Entity;
}
别名对我们来说是一个可选字段,但是当 xml 中缺少“别名”属性时,反序列化程序会抛出异常。你如何使它成为可选的?是否需要架构?
【问题讨论】:
标签:
c#
.net
xml
xml-serialization
【解决方案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);
}
}
}
如您所见,输入 XML 中省略了 alias 属性,但反序列化没有问题。