Duplicaté possible: strong>
Comment (XML) Serialize A URI P>à ma connaissance
uri code> implémente isherialisable, mais jette une erreur lorsqu'il est utilisé comme celui-ci: p>
xxx pré> fonctionne juste si
uri code> type est remplacé par
chaîne code>. p>
Quelqu'un sait quel est le coupable? p>
solution proposée par anton gogolev em >: h2>
xxx pré> (merci pour SLAKS EM> indiquant également la frontière de ma méthode ...) p>
Ceci produit XML Sortie: P>
<Server> <URI>http://localhost/</URI> <Name>test</Name> </Server>
4 Réponses :
Pour être sérialisé à XML, la classe Pour contourner cela, changez URI code> doit avoir un constructeur sans paramètre, ce qui ne doit pas:
uri code> est conçu pour être immuable. Honnêtement, je ne vois pas pourquoi il ne peut pas être sérialisé em> sans avoir un constructeur sans paramètre. P>
URI code> Type de propriété sur
String CODE> ou ajoutez une autre propriété appelée
_uri code>, marque
uri < / code> avec
xmlignoreattribute code> et réécrire c'est
obtenir code> méthode comme
obtenez {retourne neuf uri (_uri); } code>. p>
J'ai ajouté votre solution à la question, juste pour rendre le code visible ...
Exceptions internes dit: P>
System.uri ne peut pas être sérialisé car il n'a pas de constructeur sans paramètre. P>
Une réponse simple est que vous ne pouvez pas sérialiser cela à XML. P>
Vous confondez la sérialisation binaire avec la sérialisation XML. P>
La sérialisation XML est un processus très simple qui enregistre les valeurs de champ et se restaure dans un nouvel objet. P>
La sérialisation binaire est beaucoup plus puissante et permet à l'objet de contrôler le comportement de sérialisation. interface iserializable , quel URI s'applique , n'est utilisé que pour la sérialisation binaire. P>
C'est en effet le cas. Je pensais que l'Iséralisable signifie qu'il est sérialisable par tout sérieliseur (y compris XML). Mais je n'ai pas considéré cela comme une réponse à mon problème i> parce que mon problème réel était d'obtenir ce XML sérialisé.
Peut-être que je devrais changer le sujet, car cela concerne spécifiquement la sérialisation XML ...
En réalité, la meilleure solution serait l'inverse - stocker la valeur dans une propriété URI et l'accéder à une chaîne.
Par exemple: P>
public class Server { public string Name { get; set; } [XmlIgnore] public Uri Uri { get; set; } [XmlElement("URI")] public string UriString { get { return Uri.ToString(); } set { Uri = new Uri(value); } } }
Oui, c'est correct, merci pour ça! Cela ne vous dérange pas si je l'ai ajouté au code que j'ai écrit à la question.