JSON数组正在转换为通用列表,但未转换为通用集合。为什么?
我正在将一个Json数组从客户端web应用程序发送到asp.net webapi。 比如说,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
{
"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可能会对您有所帮助。