1

我在序列化具有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 的字符串表示形式吗?

4

2 回答 2

3

该类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; }
}
于 2010-11-01T02:32:49.743 回答
2

它必须是XmlSerializer吗? DataContractSerializer会工作:

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

这是一篇总结差异的好文章

于 2010-11-01T08:59:43.760 回答