XmlSerializer - Ошибка сериализации объекта со свойством URI - PullRequest
1 голос
/ 01 ноября 2010

У меня проблемы с сериализацией класса со свойством 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 ]

2 голосов
/ 01 ноября 2010

Это должно быть XmlSerializer?DataContractSerializer будет работать:

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

Вот хорошая статья , которая суммирует различия

2 голосов
/ 01 ноября 2010

Класс 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; }
}
...