2015-06-22 77 views
0

我有一个问题,在c#中的xml序列化为Windows 7 64位。 我想要序列下面的类:Xml序列化c#枚举只适用于某些计算机

[XmlRoot("configuration")] 
    public class ClaseQueSeSerializa 
    { 
     [XmlElement(ElementName = "Nombre")] 
     public string Nombre { get; set; } 

     [XmlElement(ElementName = "Edad")] 
     public int Edad { get; set; } 


     [XmlElement(ElementName = "tipoDeFichero", Type = typeof (Enumerados.teOrigenDato))] 
     //[XmlIgnore] 
     public Enumerados.teOrigenDato EnumeradoOrigen { get; set; } 

     public ClaseQueSeSerializa() 
     { 
      Nombre = "John Connor"; 
      Edad = 15; 
      EnumeradoOrigen = Enumerados.teOrigenDato.Fichero; 
     } 

    } 

这是序列化方法:

public static class Serializador 
{ 

    public static object Deserializar(string file, Type type) 
    { 
     try 
     { 
      XmlSerializer xmlSerz = new XmlSerializer(type); 

      using (StreamReader strReader = new StreamReader(file, Encoding.Default, true)) 
      { 
       object obj = xmlSerz.Deserialize(strReader); 
       return obj; 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 
    } 

    public static object Serializar(string file, Object obj) 
    { 
     try 
     { 

      XmlSerializer serializer = new XmlSerializer(obj.GetType()); 

      using (StreamWriter stream = new StreamWriter(file, false, Encoding.Default)) 
      { 
       XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
       ns.Add(String.Empty, String.Empty); 

       serializer.Serialize(stream, obj, ns); 
      } 

      return true; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 
    } 
} 

这是方法调用:

if (File.Exists(RUTA_INSTALACION_CAM + @"\prueba.xml")) 
     claseQueSeSerializa = (ClaseQueSeSerializa)Serializador.Deserializar(RUTA_INSTALACION_CAM + @"\prueba.xml", typeof(ClaseQueSeSerializa)); 
    else 
     Serializador.Serializar(RUTA_INSTALACION_CAM + @"\prueba.xml", claseQueSeSerializa); 

当我运行它给我以下错误:错误反映类型NameProject.ErrorSerializarEnumerados 但是,当我运行生成的exe在其他PC中,它的工作原理。

此外,下面的代码序列化我的课,而不会在我的大型机错误:

[XmlRoot("configuration")] 
public class ClaseQueSeSerializa 
{ 
    [XmlElement(ElementName = "Nombre")] 
    public string Nombre { get; set; } 

    [XmlElement(ElementName = "Edad")] 
    public int Edad { get; set; } 


    //[XmlElement(ElementName = "tipoDeFichero", Type = typeof (Enumerados.teOrigenDato))] 
    [XmlIgnore] 
    public Enumerados.teOrigenDato EnumeradoOrigen { get; set; } 

    public ClaseQueSeSerializa() 
    { 
     Nombre = "John Connor"; 
     Edad = 15; 
     EnumeradoOrigen = Enumerados.teOrigenDato.Fichero; 
    } 

} 

所以我认为只有在一些窗口序列化枚举时7 64位

所有的测试电脑我有一个错误已经安装了Windows 7 64位。

我即将发疯。有些天才知道什么是问题?

回答

0

更改编码来源:Encoding.Default要:Encoding.UTF8

+0

我尝试了你的建议,但它不工作。我认为它不能解决问题,因为当我忽略枚举时,类ClaseQueSeSerializa正在被正确序列化。 –

0

我解决我的问题更新的.NET Framework 4.0至4.5。