2011-06-01 8 views
5

¿Alguien sabe cómo convertir una tabla hash de una cadena XML luego de vuelta a una tabla hash sin utilizar el XMLSerializer basado .NET. El XMLSerializer plantea algunos problemas de seguridad cuando el código se ejecuta dentro de IE y el modo protegido del navegador está activado:Hashtable para cadena XML y de nuevo a HashTable sin utilizar .NET Serializador

Así que, básicamente, estoy buscando una manera fácil de convertir ese Hashtable a cadena y volver a una Hashtable.

Cualquier código de ejemplo sería muy apreciada.

Gracias

Respuesta

5

Se puede utilizar la clase DataContractSerializer:

using System; 
using System.Collections; 
using System.IO; 
using System.Runtime.Serialization; 
using System.Text; 
using System.Xml; 

public class MyClass 
{ 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var table = new Hashtable 
     { 
      { "obj1", new MyClass { Foo = "foo", Bar = "bar" } }, 
      { "obj2", new MyClass { Foo = "baz" } }, 
     }; 

     var sb = new StringBuilder(); 
     var serializer = new DataContractSerializer(typeof(Hashtable), new[] { typeof(MyClass) }); 
     using (var writer = new StringWriter(sb)) 
     using (var xmlWriter = XmlWriter.Create(writer)) 
     { 
      serializer.WriteObject(xmlWriter, table); 
     } 

     Console.WriteLine(sb); 

     using (var reader = new StringReader(sb.ToString())) 
     using (var xmlReader = XmlReader.Create(reader)) 
     { 
      table = (Hashtable)serializer.ReadObject(xmlReader); 
     } 
    } 
} 
+0

que funcionaría si - Gracias –

1

no tengo tiempo para probar esto, pero trate:

XDocument doc = new XDocument("HashTable", 
           from de in hashTable 
           select new XElement("Item", 
                new XAttribute("key", de.Key), 
                new XAttribute("value", de.Value))); 
+0

No se pudo encontrar una implementación del patrón de consulta para el tipo de fuente 'System.Collections.Hashtable' – AMH

+0

, no funcionará, porque hastable no implementa ienumerator para hacer LINQ En contra – AMH