【问题标题】:JsonConverter DeserializeObject Single or Multiple to Generic class [duplicate]JsonConverter DeserializeObject Single or Multiple to Generic class [重复]
【发布时间】:2018-03-19 08:29:59
【问题描述】:

我想将我的 json 字符串反序列化为我的泛型类。但我想用一种方法做到这一点。当我调用此链接时;

这是我的代码; 它是我的班级:

public class Test
{
    public string userId { get; set; }

    public string Id { get; set; }
}

它是我的反序列化类:

    private static async Task<IRestResponse<T>> MapResponse<T>(HttpResponseMessage response) where T : class
    {
        var restResponse = new WebApiRestResponse<T>
        {
            Content = await response.Content.ReadAsStringAsync(),
            StatusCode = response.StatusCode
        };
        try
        {
            var body = await response.Content.ReadAsStringAsync();
            if (response.Content.Headers.ContentType.MediaType == "text/plain")
                restResponse.Exception = new RestInteractionException(body);
            else
                restResponse.Data = JsonConvert.DeserializeObject<List<T>>(body); ;
        }
        catch (Exception e)
        {
            restResponse.Exception = e;
        }

        return restResponse;
    }


 public interface IRestResponse
    {

        string Content { get; }


        Exception Exception { get; set; }

        HttpStatusCode StatusCode { get; }
    }

    public interface IRestResponse<T> : IRestResponse
    {
        List<T> Data { get; }

    }

https://jsonplaceholder.typicode.com/posts/1

它返回到单个对象。

当我调用此链接时;

https://jsonplaceholder.typicode.com/posts

MapResponse 类将 json 反序列化为泛型类。但有时我调用单个对象,有时我调用列表对象。那么我该如何在这段代码中做到这一点呢?

最好的问候

【问题讨论】:

  • 您需要编写实现您所描述的逻辑的代码。或者,您可以提供您尝试过的示例代码,人们可能会在这里为您提供帮助。
  • 不发布代码就无法理解您的问题。在 SO 上,人们会利用空闲时间帮助您解决问题。花时间充分描述您的问题并不是要求太多。
  • 我分享代码。希望你能理解
  • 我做到了。但其返回堆栈溢出错误。当您尝试单个对象时,它会告诉您 System.Collections.Generic.List`1[Item]' 因为该类型需要 JSON 数组(例如 [1,2,3])才能正确反序列化。 dotnetfiddle.net/SgM0LY

标签: c# json rest json.net


【解决方案1】:

由于有时您可以将列表作为结果,因此如果您需要单一方法,请始终将其作为列表返回。当您有一个对象时,只需创建新列表并添加它。

【讨论】:

  • 我分享我的代码。但我不明白什么时候是单曲的,什么时候是单曲的。我怎么理解?你能告诉我吗。我可以在每种情况下返回列表。
猜你喜欢
  • 2017-11-15
  • 1970-01-01
  • 2016-05-19
  • 2022-12-02
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
相关资源
最近更新 更多