Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON数组正在转换为通用列表,但未转换为通用集合。为什么?_Json_List_Collections_Asp.net Web Api - Fatal编程技术网

JSON数组正在转换为通用列表,但未转换为通用集合。为什么?

JSON数组正在转换为通用列表,但未转换为通用集合。为什么?,json,list,collections,asp.net-web-api,Json,List,Collections,Asp.net Web Api,我正在将一个Json数组从客户端web应用程序发送到asp.net webapi。 比如说, { "SurveyId":3423, "CreatorId":4235, "GlobalAppId":34, "AssociateList":[ {"AssociateId":4234}, {"AssociateId":43}, {"AssociateId":23423}, {"AssociateId":43

我正在将一个Json数组从客户端web应用程序发送到asp.net webapi。 比如说,

{
    "SurveyId":3423,
    "CreatorId":4235,
    "GlobalAppId":34,
    "AssociateList":[
        {"AssociateId":4234},
        {"AssociateId":43},
        {"AssociateId":23423},
        {"AssociateId":432}
    ],
    "IsModelDirty":false,
    "SaveMode":null
}
这里的关联列表是一个JSON数组, 通常它会自动序列化为列表对象

使用下面的代码,我将响应发布到WebApi

public IEnumerable<Associate> Post(ResponseStatus responseStatus)
{
   return this.responsestatusrepository.ResponseStatusCheck(responseStatus);               
}
public IEnumerable Post(ResponseStatus ResponseStatus)
{
返回此.responsestatusrepository.ResponseStatusCheck(responseStatus);
}
ResponseStatus类如下所示

public class ResponseStatus : AppBaseModel
{
        public int SurveyId { get; set; }
        public int CreatorId { get; set; }
        public int GlobalAppId { get; set; }
        public List<Associate> AssociateList { get; set; }
}
公共类响应状态:AppBaseModel
{
public int SurveyId{get;set;}
public int CreatorId{get;set;}
public int GlobalAppId{get;set;}
公共列表关联列表{get;set;}
}
作为代码分析更正的一部分,我已将列表更改为Collection。 即,
public Collection AssociateList{get;set;}


但是当我们使用集合而不是列表时,它总是得到一个空值。有什么具体的原因吗?

好的,我想我必须间接地回答这个问题。 您传递给服务器的是一个对象数组(JSON格式),但一旦您开始在C#中处理它,对象数组现在就被视为单个C#对象。在这个对象中,您的模型期望其中一个字段是一个关联字段的集合

好的,当我使用类似于本例中提到的JSON数据时,我更喜欢使用Newtonsofts的JOject

下面是我如何使用您提供的JSON数据创建C#对象的:

使用您的模型:

public class ResponseStatus
{
    public int SurveyId { get; set; }
    public int CreatorId { get; set; }
    public int GlobalAppId { get; set; }
    public Collection<Associate> AssociateList { get; set; }
}

public class Associate
{
    public int AssociateId { get; set; }
}
公共类响应状态
{
public int SurveyId{get;set;}
public int CreatorId{get;set;}
public int GlobalAppId{get;set;}
公共集合关联列表{get;set;}
}
公共班级助理
{
public int AssociateId{get;set;}
}
制作了一个例程,该例程获取字符串(JSON数据),并返回ResponseStatus类型的对象:

using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;

---------------------------------------------------------------------

public static ResponseStatus GetResponseStatusObject(string jsonData)
{
    JObject jObject = JObject.Parse(jsonData);
    return jObject.ToObject<ResponseStatus>();
}
使用系统;
使用System.Collections.Generic;
使用Newtonsoft.Json.Linq;
---------------------------------------------------------------------
公共静态ResponseStatus GetResponseStatusObject(字符串jsonData)
{
JObject=JObject.Parse(jsonData);
返回jObject.ToObject();
}
现在,当我调用此方法并传递与您提供的完全相同的JSON数据时,我得到以下结果:

这可能不会直接解决您的问题,但在使用JavaScript/C#时,希望能引导您正确理解数组/对象序列化

祝你好运

尝试使用IEnumerable可能会对您有所帮助。