如何在解决自我引用后优化JsonResult?

时间:2017-04-30 12:27:41

标签: json asp.net-mvc json.net self-reference

下图描述了我与用户和房间之间的模型关系。

ER

他们之间有很多关系,
我已经解决了JSON.NET的自我引用问题

并向Application_Start函数添加一些配置。 它看起来像:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Formatting = Newtonsoft.Json.Formatting.Indented,
                ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
            };
        }

我定义了这样的API,将数据库中的所有用户作为Json返回。

public ActionResult Index()
        {
            return Content(JsonConvert.SerializeObject(db.UserSet), "application/json");
        }

关键是,当我得到一个JsonResult时,它看起来像是 (每个"用户"具有导航属性" Room")

[
  {
    "Room": [
      {
        "User": [
          {
            "Room": [],
            "Id": 3,
            "Name": "waterball",
            "Account": "pppaass",
            "Password": "123"
          }
        ],
        "Id": 1,
        "Name": "sadafsa"
      }
    ],
    "Id": 2,
    "Name": "waterball",
    "Account": "safasfasd",
    "Password": "123"
  },
  {
    "Room": [
      {
        "User": [
          {
            "Room": [],
            "Id": 2,
            "Name": "waterball",
            "Account": "safasfasd",
            "Password": "123"
          }
        ],
        "Id": 1,
        "Name": "sadafsa"
      }
    ],
    "Id": 3,
    "Name": "waterball",
    "Account": "pppaass",
    "Password": "123"
  },  ........
  

显然,结果看起来复杂
  如何才能获得每个会议室的 ID,姓名但没有用户属性?
  或者人们处理这个问题的常见方式究竟是什么?

=============================================== ============

我已更改我的密码以达到我的要求, 但这实际上是解决这个问题的常用方法吗? 或者它有一些潜在的问题吗?

public ActionResult Index()
        {
            var result = from u in db.UserSet
                        select new
                        {
                            Id = u.Id,
                            Account = u.Account,
                            Password = u.Password,
                            Room = from r in u.Room
                                   select new
                                   {
                                       Id = r.Id,
                                       Name = r.Name
                                   }
                        };
            return Content(JsonConvert.SerializeObject(result), "application/json");
        }

0 个答案:

没有答案