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

时间:2010-11-01 02:20:16

标签: c# .net 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的字符串表示形式吗?

2 个答案:

答案 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)

是否必须XmlSerializerDataContractSerializer可行:

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

这是一个很好的article,总结了差异