2010-11-01 19 views
1

Je rencontre des problèmes lors de la sérialisation d'une classe avec une propriété Uri.XmlSerializer - Erreur de sérialisation d'un objet avec une propriété 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'. 

Je souhaite que cette propriété soit sérialisée. Quel est le moyen de contourner cela? Dois-je déclarer une sorte de convertisseur et utiliser la représentation sous forme de chaîne de l'URI?

+0

double possible de http://stackoverflow.com/questions/1036492/how-to-xml-serialize-a- Uri –

Répondre

2

La classe Uri n'est pas sérialisable en XML, car elle n'a pas de constructeur par défaut et toutes ses propriétés sont en lecture seule. Pour contourner ce problème, vous pouvez sérialiser une chaîne à la place:

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

-t-il être XmlSerializer? DataContractSerializer fonctionnerait:

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

Voici une belle article qui résume les différences