1
我使用XmlSerializer
和StreamWriter
序列化/反序列化包含双精度值的对象。在生成的.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>
这种特殊情况下。有可能吗?
不知道,但我觉得这个线程可能有你需要的。 http://stackoverflow.com/questions/3840803/how-to-output-hex-numbers-via-xml-serialization-in-c – Jonathan