我一直在玩Json.NET,我很喜欢它。但是,当使用值类型成员反序列化对象时,我遇到了一个问题。例如,请考虑以下代码:Json.NET - 值类型成员没有得到反序列化?
public struct Vector
{
public float X;
public float Y;
public float Z;
public override string ToString()
{
return string.Format("({0},{1},{2})", X, Y, Z);
}
}
public class Object
{
public Vector Position;
}
class Program
{
static void Main(string[] args)
{
var obj = new Object();
obj.Position = new Vector { X = 1, Y = 2, Z = 3 };
var str = JsonConvert.SerializeObject(obj);
Console.WriteLine(str); // {"Position":{"X":1.0,"Y":2.0,"Z":3.0}}
obj = JsonConvert.DeserializeObject<Object>(str);
Console.WriteLine(obj.Position); // (0,0,0)
Console.ReadKey(true);
}
}
位置已正确序列化,但在反序列化期间未恢复。有趣的是,下面的代码按预期工作。
class Program
{
static void Main(string[] args)
{
var vec = new Vector { X = 1, Y = 2, Z = 3 };
var str = JsonConvert.SerializeObject(vec);
Console.WriteLine(str); // {"X":1.0,"Y":2.0,"Z":3.0}
vec = JsonConvert.DeserializeObject<Vector>(str);
Console.WriteLine(vec); // (1,2,3)
Console.ReadKey(true);
}
}
正如你所看到的,这个矢量本身就是正确的序列化/反序列化。对于第一种情况,有没有简单的解决方案,还是我必须沿着自定义转换器的方式创建一些东西?
定义一个名为类'Object'是自找麻烦。 – JaredPar 2010-09-30 22:37:28
我同意,但我可以放心地说,这不是问题的根源。 – kloffy 2010-09-30 22:49:48
可能的重复[为什么我不能反序列化这个自定义结构使用Json.Net?](http://stackoverflow.com/questions/24726273/why-can-i-not-deserialize-this-custom-struct-using- json-net) – Oxoron 2015-07-08 14:13:26