2015-06-22 76 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。