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 に答える