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

本文关键字:复制 代码 类型 net 反序列化 包装 Json | 更新日期: 2023-09-27 18:02:27

在 C# 中,我包装基元类型以跟踪基元表示的内容。下面是一个示例:

class Meters {
    public readonly float Value;
    public Meters(float v) { Value = v; }
}

然后,我将这些类型组合到对象中:

class Box {
    public Meters Width { get; set; }
    public Meters Height { get; set; }
}

使用 Json.net,我需要从如下所示的 json 数据中反序列化Box

{
    "Width": 3.23,
    "Height": 2.0
}

是否可以在不将 json 更改为 "Width": { "Value": 3.23 } 并且无需为每种类型(如 Meters(重复样板代码的情况下完成此操作?

谢谢。

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

可以通过向类添加一些implicit operator可以将基元(即floatdecimaldouble等(转换为对象的类来实现。如。

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();
    }
}