包含数组的JSON上的JavaScriptSerializer

时间:2011-06-23 00:04:52

标签: c# arrays json javascriptserializer

有一个类似的问题有相同的标题,但解决方案对我的问题无效。

我正在尝试序列化以下JSON:

{"Id":1,
 "Questions":
    [{"Id":"q-1-Q0001","Text":"Volume Too High"},
     {"Id":"q-1-Q0002","Text":"Volume Too Low"}],
 "Text":"My text."}

在我的C#中使用这种结构:

public class Issue
{
    public Issue() { Questions = new List<Question>(); }
    public string Id { get; set; }
    public List<Question> Questions { get; set; }
    public string Text { get; set; }
}

public class Question
{
    public string Id { get; set; }
    public string Text { get; set; }
}

我让JavaScript将带有上述JSON的POST发送到此C#函数:

public JsonResult AddIssueToQueue(Issue issue)
{
    var id = issue.Id; // Set correctly
    var text = issue.Text; // Set correctly
    var q = issue.Questions; // NOT set correctly. Set to List of two empty Question items.
}

id和text设置正确,但q设置为包含两个空Question对象的List(Id和Text各为null)。

我的JSON格式不正确吗?为什么Questions数组没有正确传播?

2 个答案:

答案 0 :(得分:0)

这只是一个疯狂的猜测,但是你的JSON结构有一个带整数的ID,如上面提到的rsbarro。但是你在C#中的代理类期待一个字符串 - 类型转换是否可能在那里混合?

答案 1 :(得分:0)

这是我的ajax调用,它工作正常我得到的问题列表

   $.ajax({
                type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: "{'issue':{'Id':1,'Questions':[{'Id':'q-1-Q0001','Text':'Volume Too High'},{'Id':'q-1-Q0002','Text':'Volume Too Low'}],'Text':'My text.'}}" ,

            dataType: 'html',
            url: 'AddIssueToQueue',
            success: function (data) {
                if (data) {
                    //Do something 
                }
            }
        });

您也可以分享您的代码。