【发布时间】:2012-11-06 18:19:38
【问题描述】:
试图反序列化这个类的一个实例
[Serializable]
public class InstalledMeter : ISerializable
{
public string Description { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Description", Description);
info.AddValue("Latitude", Latitude);
info.AddValue("Longitude", Longitude);
}
}
实例:
new InstalledMeter {Description = "Something", Latitude = 0.0, Longitude = 0.0};
我的序列化方法
public static class SerializeString
{
public static string SerializeObject<T>(this T toSerialize)
{
var xmlSerializer = new XmlSerializer(toSerialize.GetType());
var textWriter = new StringWriter();
xmlSerializer.Serialize(textWriter, toSerialize);
return textWriter.ToString();
}
public static T XmlDeserializeFromString<T>(this string objectData)
{
return (T)XmlDeserializeFromString(objectData, typeof(T));
}
public static object XmlDeserializeFromString(string objectData, Type type)
{
var serializer = new XmlSerializer(type);
object result;
using (TextReader reader = new StringReader(objectData))
{
result = serializer.Deserialize(reader);
}
return result;
}
}
但是当我序列化对象时,它具有这些值
【问题讨论】:
-
您在这里遇到文化问题吗?似乎您提供了以点作为小数分隔符的双精度值,结果显示逗号作为小数分隔符。
-
您没有显示要反序列化的 xml。显示的经度值是双精度的 Epsilon 值。在监视窗口上执行 double.Epsilon 并看看你得到了什么。发布您的 xml 源代码,我们可能能够准确地找出导致此问题的源代码中的内容。 .
-
如果我将类型更改为 int 它可以工作,但我没有 XML 源,我只是序列化 InstalledMeter {Description = "Something", Latitude = 0.0, Longitude = 0.0};到带有 SerializeObject 的字符串,将其解析为字符串并反序列化它,是的 Epsilon = 4,94065645841247E-324
-
如果我将 InstalledMeter 中的属性更改为字符串,然后只执行 .ToString() 和 Convert.ToDouble() 那么它工作正常,但这只是非常丑陋的代码......
-
在您的代码示例中,字符串
installedMeter的值是多少?