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
(重复样板代码的情况下完成此操作?
谢谢。
这
可以通过向类添加一些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();
}
}