La réponse Xml je reçois est la suivante:désérialisation XML avec des préfixes d'espace de noms qui ne sont pas définis
<response>
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="java:com.someDomain.item">
<name>some name</disc-name>
<description>some description</disc-desc>
</item>
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="java:com.someDomain.item">
<name>some name</disc-name>
<description>some description</disc-desc>
</item>
<otherValue>12.1</otherValue>
</response>
Ma classe est décorée comme tel:
[XmlElement("item")]
public Item[] Items{get;set;}
[XmlElement("otherValue")
public string OtherValue{get;set;}
Lorsque je tente de désérialiser le Xml ci-dessus pour la classe décrite, je reçois une erreur de "namespace prefix 'java' n'est pas défini". L'ajout de l'attribut "namespace" à la classe résout l'erreur d'analyse (cependant, le xml est alors déformé par rapport à l'original).
-à-dire
[XmlElement(ElementName="item",Namespace="java")]
Comment dois-je être la décoration d'une propriété donnée pour correspondre avec un nouvel espace de noms? Ou, comment puis-je définir correctement l'espace de noms? Je ne suis pas à 100% sur l'utilisation d'un tableau de stock pour ma section énumérable non plus, mais je pense que le problème d'espace de noms est précaire pour le moment. Toute idée ou pensée sont grandement appréciées!
MISE À JOUR:
Je pense mieux la question est reformulée maintenant que je suis revenu en arrière un peu:
Comment utilisez-vous un XmlElementAttribute (ou tout autre attribut) d'avoir une classe qui peut sérialiser dans l'extrait d'élément ci-dessus, y compris les balises xsi? En ce qui concerne mon problème particulier, j'ai réalisé que la réponse Xml est hors de mon contrôle, je n'ai pas besoin des attributs xsi pour commencer. Pour contourner le problème de sérialisation, je fais simplement ce qui suit (élément XmlElement contient le document original ci-dessus):
foreach(XmlNode node in element)
node.Attributes.RemoveAll();
Je ne faisant remarquer ma solution personnelle que ce n'est pas vraiment une solution.
Cela a du sens pour moi, ne pas avoir "java" répertorié comme un espace de noms. Cependant, lors de la désérialisation de la réponse Xml entrante, je reçois l'erreur "Le préfixe d'espace de noms 'java' n'est pas défini". –
J'ai supposé que c'était dans le reste du document que vous n'avez pas montré. Pouvez-vous publier l'intégralité du document XML? Si 'java:' n'est pas défini, il n'y a rien que vous puissiez faire - c'est juste un mauvais XML. –
Plusieurs "autres valeurs" ont été ajoutées à l'exemple ci-dessus, mais oui, à part la balise de version xml de l'en-tête, c'est tout le document. Ceci est reçu comme une réponse REST, donc je n'ai pas de contrôle sur le Xml à ma façon, juste en essayant de le convertir en un objet utilisable. –