【问题标题】:Convert List base object to Json string in C#在 C# 中将 List 基础对象转换为 Json 字符串
【发布时间】:2014-01-24 18:50:49
【问题描述】:

目前我尝试将 List 对象转换为 Json 字符串,这让我对我的 ASP.net MVC 项目感到疯狂。

型号:

public class PagerBase<T>:List<T> where T:EntityBase
{
    public int totalpage {get;set;}
    public int pageindex {get;set;}
    public int pagesize  {get;set;}

    public PagerBase(IEnumerable<T> source, int totalpage , int pageindex ,int pagesize)
    {
        this.totalpage = totalpage ;
        this.pageindex = pageindex;
        this.pagesize = pagesize;
        this.AddRange(source);
    }
}

我这样的操作

public JsonResult GetClient()
{
    int pagesize=20;
    int pageindex1;

    var providers = getclient(20,1);
    var totalpage= gettotalpage(20);

    var pagerclient=new PagerBase<Client>(providers,totalpage,pageindex,pagesize);
    JavaScriptSerializer serializer = new JavaScriptSerializer();

    var jsonstring=serializer.Serialize(pagerclient);
    JsonResult jr = Json(new
    {
        Html = jsonstring,
        Message = "Ok"
    }, JsonRequestBehavior.AllowGet);

    return jr;
}

我希望结果至少包括totalpagepagesizepageindex,但实际上如果没有客户端,我得到的是空字符串。

【问题讨论】:

  • 我看到了很多这样的问题,但仍然无法理解为什么有人在使用这个糟糕的 JsonResult 库(除了可能是因为它在 system.web.mvc 中,但这不是一个好的理由)。如果您愿意改用 json.NET,我会提供一个答案,但 JsonResult 类只是个玩笑,我不会费心去纠正任何使用它的代码:p
  • 谢谢你回答我的问题,我的问题与 JsonResult 无关。

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


【解决方案1】:

JSON 不能对既具有属性又是数组的数据进行编码。如果你使用 Json.NET,我相信你可以写一个 custom serializer,但如果可能的话,稍微重构你的类会更容易:

public class PagerBase<T> where T:EntityBase
{
    public List<T> items {get;set;}
    public int totalpage {get;set;}
    public int pageindex {get;set;}
    public int pagesize  {get;set;}

    public PagerBase(IEnumerable<T> source, int totalpage, int pageindex, int pagesize)
    {
        this.items = source.ToList();
        this.totalpage = totalpage;
        this.pageindex = pageindex;
        this.pagesize = pagesize;
    }
}

顺便说一句,我建议您切换到Json.NET。比JavaScriptSerializer好多了。

【讨论】:

  • 顺便说一句,我听说很多人说 Json.Net 好多了,我想知道 Json.Net 好到什么程度
  • 速度、灵活性、易用性等。在 Json.NET 网站的底部附近,它有一个与其他库相比的功能列表。我想说对您来说最大的不同是易于定制。
  • 我刚刚查看了 json.Net 网站,它确实比较了 MS 的功能,我现在就去这个。谢谢。
  • @Ericyu67 我会说蒂姆的评估非常准确。对我来说,最重要的是它对于常见的用例并不困难,但比JsonResult 功能更全面,所以当你想做更高级的事情时,这是一个选择。如果您在任何地方都使用JsonResult 构建一个大型项目,然后发现您需要做一些更高级的事情,您将陷入困境。
  • 你说得对,我根据 JsonResult 做了很多事情,因为我可能不知道还有其他选项可以提前移动。现在我意识到有些地方可以改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多