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

时间:2014-09-22 13:20:32

标签: json list collections asp.net-web-api

我从客户端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时,它总是得到一个空值。这有什么特别的原因吗?

1 个答案:

答案 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数据时,我得到了:

Breakpoint after method ran

这可能无法直接解决您的问题,但在使用JavaScript / C#时,希望能指导您理解数组/对象序列化的正确方向。

祝你好运!