如何将JSON数组或JSON对象转换为对象列表?

灵魂大师

我尝试通过使用代码为一些已回答的问题创建自定义JSON转换器。

public class SingleValueArrayConverter<T> : JsonConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.StartObject)
        {                
            T instance = serializer.Deserialize<T>(reader);
            return new List<T>() { instance };
        }
        else if (reader.TokenType == JsonToken.StartArray)
        {
            return serializer.Deserialize<List<T>>(reader);
        }

        return null;
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override bool CanWrite
    {
        get { return false; }
    }

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

这是我的示例模型类。

  public class Foo
{
    [JsonProperty("type")]
    public string Type;
}

我使用以下代码执行。它会导致有关堆栈溢出的错误。

var converter = new SingleValueArrayConverter<Foo>();

var test1 = "[{ \"type\": \"test\" }]";
var result1 = JsonConvert.DeserializeObject<List<Foo>>(test1, converter);

var test2 = "{ \"type\": \"test\" }";
var result2 = JsonConvert.DeserializeObject<List<Foo>>(test2, converter);

在此处输入图片说明

灵魂大师

将任何JSON转换为.NET对象的最简单方法是使用JToken对象的“ ToObject”方法。

public class FooConverter : JsonConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var token = JToken.Load(reader);

        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<Foo>>();
        }

        var item = token.ToObject<Foo>();

        return new List<Foo> { item };
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override bool CanWrite
    {
        get { return false; }
    }

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

PS。JTokenobject是任何JSON数据的基类,因此我们可以将JToken对象转换为任何适当的类型。

JToken             - abstract base class     
   JContainer      - abstract base class of JTokens that can contain other JTokens
       JArray      - represents an JSON array (contains an ordered list of JTokens)
       JObject     - represents an JSON object (contains a collection of JProperties)
       JProperty   - represents a JSON property (a name/JToken pair inside a JObject)
   JValue          - represents a primitive JSON value (string, number, boolean, null)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将JSON对象转换为JavaScript数组?

如何将JSON数组转换为对象

GSON。如何将json对象转换为json数组?

如何将数组转换为json对象?

如何将JSON对象转换为Typescript数组?

如何将JSON对象转换为JavaScript对象

如何将json转换为对象?

如何将数组转换为json数组对象

如何将javascript数组转换为特定的对象列表

如何将键值列表转换为对象数组?

如何将json对象列表转换为javascript对象列表?

如何将JSON Web令牌转换为JSON对象?

如何将数组转换为json对象?

如何将Json文件(包含数组)转换为(类对象的)列表C#Unity

Dart将JSON对象数组转换为对象列表

如何将JSON对象数组从Meteor Collection API转换为iOS对象?

如何将JSON对象转换为Javascript数组

如何将C#对象转换为JSON对象

如何将具有JSON字符串的数组转换为JSON对象(红宝石)

如何将json对象转换为json数组?

如何将 Class 对象列表转换为数组?

如何将 json 数组对象从 firebase sever json 转换为 javascript 数组?

如何将 JSON 对象转换为 Python 对象?

如何将 JSON 数组转换为 javascript 对象数组?

如何将命名列表转换为对象数组

如何将 Json 列表转换为键值对象

如何将 JSON 数组转换为 JSON 对象并使用 shell 脚本将其写入文件?

如何将 JavaScript 数组(不带对象名称)转换为 json(带对象名称)?

如何将 JSON 数组对象转换为列表数组 | 斯威夫特 5