gpt4 book ai didi

c# - 在反序列化期间解析 JSON 属性

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:10 28 4
gpt4 key购买 nike

使用 JSON 的以下部分:

"tags": 
{
"tiger:maxspeed": "65 mph"
}

我有相应的 C# 类用于反序列化:

public class Tags
{

[JsonProperty("tiger:maxspeed")]
public string Maxspeed { get; set; }

}

我想将它反序列化为一个整数属性:

public class Tags
{

[JsonProperty("tiger:maxspeed")]
public int Maxspeed { get; set; }

}

是否可以在反序列化过程中将字符串的数字部分从 JSON 解析为 int

我想我想要这样的东西:

public class Tags
{
[JsonProperty("tiger:maxspeed")]
public int Maxspeed
{
get
{
return _maxspeed;
}
set
{
_maxspeed = Maxspeed.Parse(<incoming string>.split(" ")[0]);
}
}
}

最佳答案

我会建议@djv 想法的变体。将字符串属性设为私有(private)并将转换逻辑放在那里。由于 [JsonProperty] 属性,序列化程序将拾取它,但它不会混淆类的公共(public)接口(interface)。

public class Tags
{
[JsonIgnore]
public int MaxSpeed { get; set; }

[JsonProperty("tiger:maxspeed")]
private string MaxSpeedString
{
get { return MaxSpeed + " mph"; }
set
{
if (value != null && int.TryParse(value.Split(' ')[0], out int speed))
MaxSpeed = speed;
else
MaxSpeed = 0;
}
}
}

fiddle :https://dotnetfiddle.net/SR9xJ9

或者,您可以使用自定义 JsonConverter 将转换逻辑与模型类分开:

public class Tags
{
[JsonProperty("tiger:maxspeed")]
[JsonConverter(typeof(MaxSpeedConverter))]
public int MaxSpeed { get; set; }
}

class MaxSpeedConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
// CanConvert is not called when the converter is used with a [JsonConverter] attribute
return false;
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
string val = (string)reader.Value;

int speed;
if (val != null && int.TryParse(val.Split(' ')[0], out speed))
return speed;

return 0;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue((int)value + " mph");
}
}

fiddle :https://dotnetfiddle.net/giCDZW

关于c# - 在反序列化期间解析 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383689/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com