Cómo deserializar XML XML dentro?

votos
1

Tengo este XML:

<Record>
    <ID>123</ID>
    <Question>Question goes here...</Question>
    <Answer>Answer goes here...</Answer>
    <ExtentedAnswer>&lt;?xml version=1.0 encoding=utf-16?&gt;&lt;ExtendedResponse xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.w3.org/2001/XMLSchema DataType=12 xmlns=http://schemas.example.com/&gt;&lt;ComplexText&gt;&lt;CityStateZip&gt;&lt;City&gt;Clifton&lt;/City&gt;&lt;State&gt;VA&lt;/State&gt;&lt;Zip&gt;20124&lt;/Zip&gt;&lt;Country&gt;US&lt;/Country&gt;&lt;/CityStateZip&gt;&lt;/ComplexText&gt;&lt;/ExtendedResponse&gt;</ExtentedAnswer>
</Record>

Deserialize funciona bien, pero me da ExtentedAnswer como cadena. ¿Es posible Deserialize XML dentro ExtentedAnswer de una sola vez. Sé que puedo deserializar el ExtentedAnswer por separado.

Publicado el 10/12/2011 a las 10:58
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
3

Hemos abordado este tema en nuestro lugar de trabajo. En nuestro caso específico, el problema consistía en convertir el texto con XSLT, que era un dolor absoluta, pero sí es posible. En el código que es menos complicado, según lo sugerido por otros carteles, simplemente sustituir los códigos de escape para <y >y analizarlo con un analizador normal.

Sin embargo, parece que desea una solución de un solo paso. Dudo mucho que el estándar XML Serializador será capaz de hacer esto, ya que no tiene conocimiento de que los elementos contienen escaparon contenido XML. El texto escapado es específicamente para detener la detección de los analizadores XML de ella, por lo que una solución hecha a mano es probablemente su única opción. Su clase debe implementar IXmlSerializabley llevar a cabo la conversión de texto en sí.

Por último, yo recomendaría fuertemente que si se tiene ningún control sobre el proceso que está creando estos datos en el primer lugar que no tienda escapado xml y encontrar otra solución. Es una molestia para trabajar con y no puedo pensar en cualquier situación en la que sería realmente necesario.

Respondida el 10/12/2011 a las 11:16
fuente por usuario

votos
1

Sí, puede hacerlo, pero xml debe almacenar el ExtentedAnswer de la siguiente manera: -

  <ExtentedAnswer>
    <![CDATA[
    <?xml version="1.0" encoding="utf-16"?>
    <ExtendedResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" DataType="12" xmlns="http://schemas.example.com/">
      <ComplexText>
        <CityStateZip>
          <City>Clifton</City>
          <State>VA</State>
          <Zip>20124</Zip>
          <Country>US</Country>
        </CityStateZip>
      </ComplexText>
    </ExtendedResponse>
    ]]>
  </ExtentedAnswer>
Respondida el 10/12/2011 a las 11:17
fuente por usuario

votos
1

Usted debe ser capaz de reemplazar &amp;lt;con el <carácter y &amp;gt;el >carácter. Esto le dará entonces una cadena que se puede utilizar con un lector de XML.

Respondida el 10/12/2011 a las 11:02
fuente por usuario

votos
0

Es posible que si lo hacen posible. Si usted acaba de hacer esto en un solo lugar, entonces yo sólo lo haría por separado, pero si usted tiene una necesidad de hacer esto en muchos lugares, entonces usted podría escribir una clase que había de hacer esto para usted y luego utilizar ese lugar que lo necesite.

Respondida el 10/12/2011 a las 11:05
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more