XmlSerializer - 使用URI属性序列化对象时出错

问题描述:

我在使用Uri属性序列化类时遇到问题。XmlSerializer - 使用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

可能的复制http://*.com/questions/1036492/how-to-xml-serialize-a-的差异URI – 2010-11-01 02:22:35

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; } 
} 

是否必须XmlSerializerDataContractSerializer将工作:

using (var stream = File.Create(@"c:\Uri.xml")) 
     new DataContractSerializer(typeof(Uri)).WriteObject(stream, new Uri(@"http://www.contoso.com/")); 

这里是一个很好的article凝聚了