在C#中,我正在包装基本类型以跟踪基元所代表的内容.这是一个例子:
class Meters {
public readonly float Value;
public Meters(float v) { Value = v; }
}
Run Code Online (Sandbox Code Playgroud)
然后我将这些类型组成对象:
class Box {
public Meters Width { get; set; }
public Meters Height { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用Json.net,我需要反序列化一个如下所示Box的json数据:
{
"Width": 3.23,
"Height": 2.0
}
Run Code Online (Sandbox Code Playgroud)
这可以在不更改json的"Width": { "Value": 3.23 }情况下完成,也可以不重复每个类型的样板代码Meters吗?
谢谢.
这可以通过增加一些可以实现implicit operator到可以在原语(即转换类float,decimal,double等),你的对象.如.
class Meters
{
public static implicit operator Meters(float value)
{
return new Meters(value);
}
public static implicit operator Meters(decimal value)
{
return new Meters((float)value);
}
public static implicit operator Meters(double value)
{
return new Meters((float)value);
}
public readonly float Value;
public Meters(float v) { Value = v; }
public override string ToString()
{
return Value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)