Json.net序列化复杂对象以在JsonResult中使用

时间:2014-08-07 13:37:39

标签: c# asp.net-mvc json.net jsonresult

第一个问题,请原谅任何礼节都失败。

我第一次使用MVC,我有一个局部视图,用户可以在“访问”中添加“访问者”。我找到another SO q/a that detailed overriding ExecuteResult in JsonResult to use Json.Net for serialization,但因为它仍然没有得到理想的结果。

我想我的问题是:我的对象没有正确设置Json.Net以正确序列化属于复杂类型集合的属性,或者我只是没有正确地序列化它们?

以下是“访问”类:

[Serializable]
public class Visit
{
    public int Id {get;set;}

    public DateTime Date {get;set;}

    public List<Visitor> Visitors {get; set;}
}

'访客'类:

[Serializable]
public class Visitor
{
    public int Id {get;set;}

    public string Name {get;set;}
}

和ActionResult:

public ActionResult AddVisitor(int VisitId, Visitor visitor)
{
    Visit visit = new Visit(visitId);

    visit.Visitors.Add(visitor);

    var result = new JsonResult()
    {
        Data = new { ok = true, url = Url.Action("Visitors", "Visit", visit) }
    }

}

...这是给我跟随网址的:

http://localhost:56296/Visit/Visitors/1?Date=08%2F14%2F2014%2008%3A57%3A42
    &Visitors=System.Collections.Generic.List%601%5BCATSVisitor%5D

(请注意,'visitor'属性只有名称,它似乎没有序列化内容)

我假设序列化字符串实际上是这样的:

{
   "Id": "1",
   "Date": "2014-08-14",
   "Visitors":"List<Visitors>"
}

我真正想要的地方是:

{
   "Id": "1",
   "Date": "2014-08-14",
   "Visitors": [{"Id" : "1","Name":"Bob"},{"Id" : "2","Name":"Jane"}]
}

0 个答案:

没有答案