我无法序列化具有Uri
属性的类。
System.InvalidOperationException was unhandled
Message=There was an error reflecting type 'Foo.Story'.
// ...
InnerException: System.InvalidOperationException
Message=There was an error reflecting property 'MyURI'.
我希望这个属性被序列化。这有什么办法?我应该声明某种转换器,并使用URI的字符串表示形式吗?
答案 0 :(得分:2)
Uri
类不能序列化为XML,因为它没有默认构造函数,并且它的所有属性都是只读的。作为解决方法,您可以改为序列化字符串:
[XmlIgnore]
public Uri MyURI { get; set; }
[XmlElement("MyURI")]
public string MyURIAsString
{
get { return MyURI != null ? MyURI.AbsoluteUri : null; }
set { MyUri = value != null ? new Uri(value) : null; }
}
答案 1 :(得分:2)
是否必须XmlSerializer
?
DataContractSerializer
可行:
using (var stream = File.Create(@"c:\Uri.xml"))
new DataContractSerializer(typeof(Uri)).WriteObject(stream, new Uri(@"http://www.contoso.com/"));
这是一个很好的article,总结了差异