convertir xml dynamique pour objet de c#
J'ai besoin d'entrées dans la conversion d'une dynamique xml définis objet c# modèle
Mon exemple de xml est comme ci-dessous :
<?xml version="1.0" encoding="utf-8" ?>
<Persons>
<Person>
<Id>10</Id>
<FirstName> Dino </FirstName>
<LastName> Esposito </LastName>
<Addresses>
<Address>
<AddressType>BillTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>ShipTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>Contact</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
</Addresses>
</Person>
</Persons>
Je m'attends à ce que les valeurs de ce code xml pour être converti en C# de l'objet au moment de l'exécution.
Je voudrais un objet semblable à la suivante à être définis:
Mon Attendus objet de classe C# est comme ci-dessous:
public class Person
{
public int Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public IList<Address> Addresses { get; set; }
}
public class Address
{
public string AddressType { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string Street3 { get; set; }
public string City { get; set; }
}
Je suis passé par la dynamique et ExpandoObject en C# 4.0, cette approche me permet d'obtenir des valeurs dynamiquement en utilisant les touches. Je ne sais pas comment je peux remplir ces pour mon modèle de données.
Remarque: je ne veux pas définir cette classe de modèle de structure, il ne cesse de changer au cours de la période de temps. Je suis à la recherche d'une solution qui me permet d'obtenir des valeurs comme DynamicObject.Les adresses.Adresse[0].Ville.
De bien vouloir donner vos entrées.
- Qu'est-ce que "xml dynamique"? Avez-vous essayez par exemple LinqToXml?
- Je ne veux pas garder l'onglet sur le contenu xml,ce qui maintient sur le changement. mon modèle de données doit également évoluer de façon dynamique basé sur xml d'entrée sur l'exécution.
- J'ai essayé de linq to Xml, je ne suis pas en mesure de travailler avec l'ensemble de l'élément. ex: adresses
- Pourquoi ne pas vous query(LINQ) votre XML à l'aide de XPath? msdn.microsoft.com/en-us/library/bb387057.aspx
- Comment avez-vous l'intention de votre modèle de données à changement sans recompiler? c'est à dire si une Personne commence à comprendre un DateOfBirth votre classe Personne est hors de date.
- Personnellement, je ne vois pas comment il est mieux de travailler avec des objets dynamiques que de définir des classes. Si/lorsque la source de données les modifications que vous allez avoir à refactoriser le code de toute façon. Il est beaucoup plus facile de le faire avec le refactoring si vous avez cours. Mais c'est juste mes 2 cents.
- Il semble que vous allez avoir à donner un cas concret d'utilisation de cette approche. Veuillez expliquer pourquoi vous voulez, même à utiliser cette approche.
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de lire cet article: http://www.codeproject.com/Articles/62839/Adventures-with-C-4-0-dynamic-ExpandoObject-Elasti. Il y a un moyen de construire des dynamiques de l'objet à partir de XML.
Ou cet article: http://www.codeproject.com/Articles/461677/Creating-a-dynamic-object-from-XML-using-ExpandoOb. Prenez ce que vous avez besoin et vous pouvez personnaliser le code de vos besoins.
Une solution à l'aide de LINQ2XML peut ressembler à ceci (pas de classes nécessaires):
La sortie est:
Vérifier cet exemple:
Vous obtiendrez:
<City>Moscow</City>
Ou de regarder cette solution à l'aide de
DynamicObject
:Désérialisation XML De l'Objet à l'aide de Dynamic
Merci à tous pour vos entrées, la solution que je suis à la recherche est disponible à cette adresse
http://www.codeproject.com/Tips/227139/Converting-XML-to-an-dynamic-object-using-ExpandoO.
J'ai créé un projet spécifiquement à cette fin, que je n'était pas satisfait avec les solutions de rechange (comme le CodeProject article lié à d'autres réponses).
J'ai posté sur Github: https://github.com/jonathanconway/XmlToDynamic.
Je préfère ne pas publier le code source ici, car il est trop grand, mais ici, c'est l'utilisation: