2012-09-19 44 views
1

我使用XmlSerializerStreamWriter序列化/反序列化包含双精度值的对象。在生成的.xml文件中,我发现存储为十进制值的double值。我更喜欢用十六进制生成双精度的方式吗?从十六进制格式序列化/反序列化双精度值

部分代码。

类序列化

[Serializable()] 
public class Variable 
{   
    public int shift; 
    public int size; 
    public int min; 
    public int max; 
    public string name; 
    public string del; 

    public Variable() 
    { 
     shift = 26; 
     size = 0; 
     min = 0; 
     max = 0; 
     name = "noname"; 
     del = "-"; 
    } 
} 

serializator类

/// <summary> 
/// class to serialize/deserialize another class 
/// </summary> 
public class serializator 
{ 
    private serializator() 
    { 
    } 

    /// <summary> 
    /// serializator 
    /// </summary> 
    /// <param name="fname">filename to serialize</param> 
    /// <param name="z">object to serialize</param> 
    static public void ser(string fname, object z) 
    { 
     System.Type st = z.GetType(); 
     XmlSerializer xSer = new XmlSerializer(st); 
     StreamWriter sWri = new StreamWriter(fname); 
     xSer.Serialize(sWri, z); 
     sWri.Close(); 
    } 

    /// <summary> 
    /// deserializator 
    /// usage: fooclass fc = (fooclass)serializator.dser("fname.xml", fc); 
    /// </summary> 
    /// <param name="fname">filename to dser</param> 
    /// <param name="z">object to grab type</param> 
    /// <returns></returns> 
    static public object dser(string fname, object z) 
    { 
     if (fname != null && fname != "" && z != null) 
     { 
      try 
      { 
       object rez = new object(); 
       XmlSerializer xSer = new XmlSerializer(z.GetType()); 
       StreamReader sRea = new StreamReader(fname); 
       rez = xSer.Deserialize(sRea); 
       sRea.Close(); 
       return rez; 
      } 
      catch(Exception e) 
      { 
       System.Windows.Forms.MessageBox.Show("config ouch\r\n"+e.Message); 
       return null; 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 
} 

一段代码从主程序

Variable v = new Variable(); 
serializator.ser("foo.xml", v); 

生成的XML文件

<?xml version="1.0" encoding="utf-8"?> 
    <Variable> 
    <shift>26</shift> 
    <size>0</size> 
    <min>0</min> 
    <max>0</max> 
    <name>noname</name> 
    <del>-</del> 
    </Variable> 

在我想看<shift>1A</shift><shift>0x1A</shift>代替<shift>26</shift>这种特殊情况下。有可能吗?

+0

不知道,但我觉得这个线程可能有你需要的。 http://stackoverflow.com/questions/3840803/how-to-output-hex-numbers-via-xml-serialization-in-c – Jonathan

回答

2

您可以使用类“变量”的这个代码,而不是你的:

[Serializable()] 
public class Variable 
{ 
    int _shiftInt; 

    public string shift 
    { 
     get 
     { 
      return _shiftInt.ToString("X"); 
     } 
     set 
     { 
      _shiftInt = int.Parse(value, System.Globalization.NumberStyles.HexNumber); 
     } 
    } 

    public int size { get; set; } 
    public int min { get; set; } 
    public int max { get; set; } 
    public string name { get; set; } 
    public string del { get; set; } 

    public Variable() 
    { 
     _shiftInt = 26; 
     size = 0; 
     min = 0; 
     max = 0; 
     name = "noname"; 
     del = "-"; 
    } 
}