我从客户端Web应用程序发送一个Json数组到asp.net webapi。 例如,
{
"SurveyId":3423,
"CreatorId":4235,
"GlobalAppId":34,
"AssociateList":[
{"AssociateId":4234},
{"AssociateId":43},
{"AssociateId":23423},
{"AssociateId":432}
],
"IsModelDirty":false,
"SaveMode":null
}
这里的Associate List是一个JSON数组, 通常它会自动序列化为List<>对象
使用以下代码,我将回复发布到WebApi
public IEnumerable<Associate> Post(ResponseStatus responseStatus)
{
return this.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; }
}
我更改了列表&lt;&gt;收集&lt;&gt;作为我的代码分析修正的一部分。
即,public Collection<Associate> AssociateList { get; set; }
但是当我们使用集合而不是List时,它总是得到一个空值。这有什么特别的原因吗?
答案 0 :(得分:0)
好的,我想我必须以间接方式回答这个问题。 传递给服务器的是一个对象数组(采用JSON格式),但是一旦在C#中开始处理它,对象数组现在被视为一个c#对象。在此对象中,您的模型需要其中一个字段为“关联集合”。
是的,当我使用类似于本案例中提到的JSON数据时 - 我更喜欢使用Newtonsofts&#39; 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; }
}
制作一个采用字符串(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>();
}
现在,当我调用此方法并传递您提供的完全相同的JSON数据时,我得到了:
这可能无法直接解决您的问题,但在使用JavaScript / C#时,希望能指导您理解数组/对象序列化的正确方向。
祝你好运!