如何将 json 字符串值序列化为 Newtonsoft Json 中的类

尼斯代码

如果我有以下模型类

public class User
{
    public string Name {get; set;}
    public string UUID {get; set;}
}

以下 JSON 字符串将被正确转换

// JSON 1
{
  "User": {
    "Name": "Hello World",
    "UUID": "000000-00000-00000"
  }
}

在我的情况下,有时我有以下 JSON JSON 2UserJSON 属性表示UUID值而不是用户模型对象

// JSON 2
{
  "User": "000000-00000-00000"
}

我想将该User类用作ASP.Net Core操作参数模型,这意味着我可能需要自定义JsonConverter.

有没有办法将上面的JSON字符串转换为UserClass?

魏奇

试试这个:

class UserJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType) => objectType == typeof(User);

    public override bool CanWrite => false;

    public override object ReadJson(JsonReader reader, Type objectType, 
        object existingValue, JsonSerializer serializer)
    {
        var token = JToken.ReadFrom(reader);
        if (token.Type == JTokenType.Null)
        {
            return null;
        }

        var user = new User();
        // Convert string
        if (token.Type == JTokenType.String)
        {
            user.UUID = token.Value<string>();
        }
        // Convert object
        else
        {
            serializer.Populate(token.CreateReader(), user);
        }

        return user;
    }

    public override void WriteJson(JsonWriter writer, object value,
        JsonSerializer serializer)
    {
    }
}

这适用于:

[JsonConverter(typeof(UserJsonConverter))]
public class User
{
    public string Name { get; set; }
    public string UUID { get; set; }
}

var obj = JsonConvert.DeserializeObject<MyClass>(
@"{
  ""User"": {
    ""Name"": ""Hello World"",
    ""UUID"": ""000000-00000-00000""
  }
}");

var obj2 = JsonConvert.DeserializeObject<MyClass>(
@"{
  ""User"": ""000000-00000-00000""
}");

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何告诉NewtonSoft.Json.JsonConvert将枚举序列化为字符串而不是int

Newtonsoft Json将具有布尔属性的动态列表反序列化为字符串

将double值序列化为JSON字符串

使用NewtonSoft Json.Net将简单字符串序列化为BSON时出错

将多个不同的键/值 JSon 数组/字符串反序列化为 C# 中相同类的集合

避免gson将json字符串反序列化为LinkedHashMap类成员

无法将 json 字符串反序列化为 ac# 类

如何使用JSON-B将JSON字符串反序列化为非公共类?

如何将java.lang.String的空白JSON字符串值反序列化为null?

将json从字符串反序列化为DataContract的方法中的匿名类型

将json字符串反序列化为python中的对象

将json字符串反序列化为python中的对象

改装GSON将json字符串中的Date序列化为java.util.date

将枚举序列化为Azure函数返回的JSON中的字符串

如何在Kotlin JS中通过JSON.stringify将Map序列化为JSON字符串?

将大对象序列化为 JSON 字符串

将JavaScript对象序列化为JSON字符串

将字符串数组序列化为json

将JSON字符串反序列化为Class

如何将C#匿名类型序列化为JSON字符串?

如何将json字符串反序列化为对象

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

如何将包含编码 HTML 的 json 字符串反序列化为 JObject?

使用 Newtonsoft.Json.JsonConvert.DeserializeObject VISUAL BASIC 将 json 字符串反序列化为可视化基本对象

Newtonsoft转义的JSON字符串无法反序列化为对象

Newtonsoft Json 在反序列化为字符串时转换日期时间格式

如何将 JSON 对象反序列化为字典,其值可以是单个字符串或字符串数组?

如何将逗号分隔的JSON字符串反序列化为单独字符串的向量?

Moshi / Kotlin-如何将NULL JSON字符串序列化为空字符串?