将json反序列化为pojo,其中json字段具有不同的数据类型C#

崛起开发商

我知道有多个线程在回答这个问题,但我的问题略有不同下面是我正在使用的类和 json。如何处理具有不同数据类型对象和双精度值的相同属性的反序列化。这是我尝试过的 - JSON 的 2 个示例:

1)第一个 json 取值为 double 类型-

{
  "$type": "SomeType",
  "Mode": "Detailing",
  "form": {
    "value": 0.1
    }
}

2)第二个json采用形式类型值-

 {
    "$type": "SomeType",
    "Mode": "Detailing",
    "form": {
        "value": {
            "day": 1,
            "month": 5,
            "year": 2025
        }
}

POJO 类我创建了一个根类,如下所示-

public class Root{
       [JsonProperty("type")]
        public string type{ get; set; }
        [JsonProperty("mode")]
        public String mode{ get; set; }
        [JsonProperty("form")]
        public Form form{ get; set; }
}

表单类如下 -

public class Form{
        [JsonProperty("value")]
        private Value myValue { get; set; }

}
public class Value
    {
        [JsonProperty("day")]
        private int day { get; set; }
        [JsonProperty("month")]
        private int month { get; set; }
        [JsonProperty("year")]
        private int year { get; set; }
}

我正在使用 JsonConverter 反序列化 json 对象中的值

public class Resolver : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return typeof(Root).IsAssignableFrom(objectType);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject item = JObject.Load(reader);
            if (item["form"]["value"].Type == JTokenType.Float)
            {
               //how to handle double type?
            }
            else if (item["form"]["value"].Type == JTokenType.Object)
            {
                return item.ToObject<Root>();
            }
           
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }
    }
哔叽

您可以使用这个 Form 类而不是自定义 json 转换器

var data = JsonConvert.DeserializeObject<Data>(json);

public class Form
{
    [JsonIgnore]
    public double myValueDouble { get; set; }
    [JsonIgnore]
    public Value myValue { get; set; }
    [JsonConstructor]
    public Form(JToken value)
    {
        if (value is JValue) myValueDouble =  value.ToObject<double>();
        else myValue=(Value) value.ToObject<Value>();
    }
    public Form()
    {

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 json 反序列化为 pojo,其中 json 字段具有不同的数据类型

如何将包含不同数据类型的JSON数组反序列化为单个对象

将JSON反序列化为多种数据类型(地理空间系统)

如何将具有不同值的相同 JSON 对象反序列化为 Java 类

Newtonsoft json将复杂对象反序列化为具有不同名称的类

将json反序列化为具有通用类型的基础对象

使用GSON将POJO序列化为具有不同名称的JSON?

对具有多个数据类型的密钥反序列化JSON文件

使用JSON对象中的类型将JSON反序列化为POJO

具有不同类型的字段的 JSON 反序列化(使用 Jackson 和 Scala)

将JSON反序列化为通用类型,其中集合属性名称根据类型而变化

将JSON反序列化为C#对象-不反序列化任何数据

将 Json 反序列化为嵌套的 pojo

放心-将响应JSON反序列化为List <POJO>

使用Jackson将JSON反序列化为ArrayList <POJO>

Django rest框架。将json字段反序列化为模型上的不同字段

将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的

如何使用抽象类将JSON数据数组反序列化为POJO?

将具有多个元素的 JSON 字段从字符串反序列化为 Vec<u8>s 的 Vec

使用LocalDateTime字段将JSON反序列化为对象

有没有办法将 Json 反序列化为 Kotlin 数据类并转换属性类型?

直接将JSON响应反序列化为强类型对象时,如何避免出现字段?

将JSON反序列化为多态类型Spring Boot

“无法将当前JSON对象反序列化为类型

如何将JSON字符串反序列化为不同的复杂类类型?

如何使用 NewtonSoft Json 反序列化为具有可变类型属性的类?

直接将Json.net JSON文件反序列化为C#字典类型?

使用GSON将POJO反序列化为JSON时将字段名称更改为小写?

无法将缓存的json数据反序列化为AsyncResult