Json.net反序列化包装类型而不复制代码

Mat*_*ner 0 .net c# json.net

在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吗?

谢谢.

Nic*_*ico 5

这可以通过增加一些可以实现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)