首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将当前JSON数组(例如[1,2,3])反序列化为“portal.Models.SubProjectViewRecord”类型

无法将当前JSON数组(例如[1,2,3])反序列化为“portal.Models.SubProjectViewRecord”类型
EN

Stack Overflow用户
提问于 2022-03-14 11:42:57
回答 2查看 2.1K关注 0票数 0

我得到了这个简单的代码,它将从url中消耗api数组。

代码语言:javascript
复制
public ActionResult ViewRecord()
        {

            ViewBag.Title = "- Geotagging Sub Project Record.";
            var webClient = new WebClient();
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                     | SecurityProtocolType.Tls11
                                     | SecurityProtocolType.Tls12;
            webClient.Headers.Add(HttpRequestHeader.Cookie, "cookievalue");
            string objJson = webClient.DownloadString(@"https://test.com/api/lib_region");

             //here we will map the Json to C# class
            Models.SubProjectViewRecord oop = JsonConvert.DeserializeObject<Models.SubProjectViewRecord>(objJson);                                                                                                               
            return View(oop);
            
    }

我的模型

代码语言:javascript
复制
namespace portal.Models
{
    public class SubProjectViewRecord
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }
}

以上代码的错误是:

代码语言:javascript
复制
'Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'portal.Models.SubProjectViewRecord' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '', line 1, position 1.'

然后,这些是我应用于模型的修正,因为有些回复正在发布。

代码语言:javascript
复制
public class SubProjectViewRecord
        {
            public List<string> Name { get; set; }
            public List<int> Id { get; set; }
        }

到这一行:

代码语言:javascript
复制
Models.SubProjectViewRecord oop = JsonConvert.DeserializeObject<List<Models.SubProjectViewRecord>>(objJson);

但是,错误引起了:

代码语言:javascript
复制
Cannot implicitly convert type 'System.Collections.Generic.List<portal.Models.SubProjectViewRecord>' to 'portal.Models.SubProjectViewRecord'

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-14 11:47:30

显然,从错误中可以看出数组中有多个项,这就是为什么会有从api reponse返回的数组。您可以对其使用List<T>,其代码如下所示:

代码语言:javascript
复制
List<Models.SubProjectViewRecord> oop = JsonConvert.DeserializeObject<List<Models.SubProjectViewRecord>>(objJson);

假设json数组元素为json对象,其中包含IdName成员,则模型如下:

代码语言:javascript
复制
public class SubProjectViewRecord
{
    public string Name { get; set; }
    public int Id { get; set; }
}                           
票数 1
EN

Stack Overflow用户

发布于 2022-03-14 11:53:44

首先,您需要知道JSON是如何返回数据的。所以,如果你有这样的东西:

代码语言:javascript
复制
[
  {
    "name": "",
    "id": ""
  }
]

您需要的是实现这样一个结构的类的列表(比如SubProjectViewRecord)。所以,你会得到这样的东西:

代码语言:javascript
复制
List<SubProjectViewRecord> oop = JsonConvert.DeserializeObject<List<SubProjectViewRecord>>(objJson);

如果你看到了,你的错误就是这么说的。它说:“我不能为一个SubProjectViewRecord变量分配一个列表”。

所以,只要确定:

类与JSON结构完全匹配。您为反序列化提供的类(传递给deserialization.的泛型)与接收deserialization.的变量相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71467196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档