Comment puis-je désérialiser des données XML dans un objet à l'aide d'un constructeur qui prend un XDocument?
J'ai une classe:
public class MyClass
{
public MyClass(){}
}
Je voudrais être en mesure d'utiliser un XMLSeralizer Désérialiser un XDocument directement dans le constructeur ainsi:
public class MyClass
{
private XmlSerializer _s = new XmlSerializer(typeof(MyClass));
public MyClass(){}
public MyClass(XDocument xd)
{
this = (MyClass)_s.Deserialize(xd.CreateReader());
}
}
Sauf que je ne suis pas autorisé à céder à "cela" dans le constructeur.
Est-ce possible?
Pour quelle raison vous voulez le faire comme ça?
Parce que ce serait bien d'instancier la classe et vient nourrir un XDocument et l'avoir défini lui-même comme ça. Il y a d'autres solutions, mais cela semble plus élégante pour moi... je suis ouvert à de meilleures suggestions.
Ne peut-on pas définir la classe d'avoir des données sérialisées en elle, donc la création de l'instance pour vous?
Parce que ce serait bien d'instancier la classe et vient nourrir un XDocument et l'avoir défini lui-même comme ça. Il y a d'autres solutions, mais cela semble plus élégante pour moi... je suis ouvert à de meilleures suggestions.
Ne peut-on pas définir la classe d'avoir des données sérialisées en elle, donc la création de l'instance pour vous?
OriginalL'auteur One Monkey | 2011-10-26
Vous devez vous connecter pour publier un commentaire.
Non, il n'est pas possible. Sérialiseurs créer des objets lorsqu'ils désérialiser. Vous avez déjà créé un objet. Au lieu de cela, fournir une méthode statique de construire à partir d'un XDocument.
OriginalL'auteur Tim Rogers
C'est plus la norme à utiliser une méthode statique charge.
OriginalL'auteur Ray
Est préférable d'utiliser une sorte d'usine, par exemple:
OriginalL'auteur Kirill Polishchuk
J'ai voulu faire la même chose et a décidé de faire ce qui suit:
OriginalL'auteur Jimbo
La réponse simple à votre question est non, vous ne pouvez pas. La raison, c'est que vous créez un objet lorsque vous désérialisez.
Mais si vous avez vraiment insister sur la possibilité pour un objet à instancier lui-même pour ainsi dire, vous pouvez utiliser un privé statique de la variable d'instance que vous pouvez charger avec l'objet que vous obtenez après la désérialisation. Les autres membres du public devrait alors fonctionner sur l'instance ( quand il n'est pas null )
un exemple ( hors de ma tête, donc il ya une petite chance qu'il n'est pas tout à fait correct ) :
J'espère que cela rend un peu clair, mais je ne suis pas fan de ce dessin. Je pense qu'il est tout trop complexes et sensibles à l'erreur.
OriginalL'auteur Chris