如何从带有 Array 属性的 Action 方法返回 Json?

2024-02-17

我正在尝试从操作方法返回一些 json 数据。

我有一个员工对象,如下所示:

public class Employee
{
     public int EmployeeID {get; set;}
     public string FirstName {get; set;}
     public string LastName {get; set;}
     //Other irrelevant properties
}

然后我有一个视图模型如下

public Class EmployeeViewModel
{

    public Employee Supervisor{get; set;}
    public List<EmployeeViewModel> Employees

} 

我需要返回一个看起来完全像这样的 json 对象:

{id: 1, name: John, children: [
    {id: 1, name: Joe, children: []},
    {id: 1, name: Rob, children: []}
]}

现在我只需要去上面的第二层,返回主管和他们下面的员工。

我将如何在我的操作方法中返回它(我已经将 viewModel 对象水化了,我只需要将它作为 json 返回)。到目前为止我的问题是children属性不会被填充。


您会惊讶于这是如此简单。只需设置模型对象,使它们具有正确的属性即可。对于您尝试实现的 JSON 字符串,您不需要视图模型,因为您似乎希望顶级对象包含员工的属性。而如果您使用视图模型对象,那么顶级对象将是视图模型对象,而员工将是该对象的属性。

相反,我认为您希望顶级对象是一个雇员,其属性是子对象(子对象)的列表。子对象还有一个称为“children”的属性。可以递归地填充。构建对象是您的责任,但我确实提供了一些带有伪数据的伪代码来帮助您入门。

public Class Employee
{
     public int EmployeeID {get; set;}
     public string FirstName {get; set;}
     public string LastName {get; set;}
     public List<Child> Children {get; set;}
}

public Class Child
{
    public int ChildID {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public List<Child> Children {get; set;{
}

现在你的行动方法。您知道您可以只返回 JsonResult 吗?做这个:

public JsonResult GetJSON()
{
    //Build employee object and add children to list. Something like the following pseudo-code:
    List<Child> childrenList = new List<Child>
    {
        new Child
        {
            ChildID = //some id,
            FirstName = "Joe",
            LastName = "Smith"
            // Add children to list.
        },
        // Add more children to list.
    }
    Employee emp = new Employee
    {
        EmployeeID = 123,
        FirstName = "John",
        LastName = "Doe",
        Children = childrenList
    };
    Return Json(emp);
}

这个 JSON 看起来像:

{ "EmployeeID":"123", "FirstName":"John", "LastName":"Doe", "Children":[
    { "ChildID":"someid", "FirstName":"Joe", "LastName":"Smith", Children [] },
    { etc... }
] }

如果您对 JSON 不太熟悉,那么您应该知道变量和名称两边的引号可确保不会出现任何误解。 MVC 为您做到了这一点,而且做得很好。它将把员工的列表属性转换为 JSON 数组,而无需您做任何工作,并且它将格式化 JSON 整齐且可读。

现在,使用 MVC 3,您还可以模型绑定到 JSON。如果您发出包含 json 对象的请求,MVC 3 会自动将其属性绑定到员工对象。因此,如果您发布了我上面列出的相同 JSON 字符串,您的操作方法可能如下所示:

public ActionResult SampleMethod(Employee emp)
{
    //emp would be the same object you sent as JSON earlier and are now sending back :D
}

NOTE:你可能会考虑改变Employee to Person,并给它一个名为Children类型的List<Person>。这样你就可以结合Employee and Child类合而为一。但自然我看不到你的所有代码,所以也许你确实有足够的独特属性来值得这两个类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从带有 Array 属性的 Action 方法返回 Json? 的相关文章

  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 将错误消息添加到@Html.ValidationSummary

    我使用标准 MVC3 Razor 视图和不显眼的 Javascript 验证 使用 Html ValidationSummary将它们显示在表单顶部 如果标准验证 例如 Required 通过 然后我运行一些非常自定义的客户端验证 当用户点
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • ASP.NET MVC - 用于管理的区域还是单独的 Web 应用程序?

    到目前为止我一直在使用MVC Area为了行政我的 mvc 应用程序的一部分 但最近我开始重新思考这个问题由于每个应用程序不能有多个表单身份验证配置 这已经成为一个问题 因为在最近的一个项目中 我想将身份验证 cookie 设置为不会对用户
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • 通过单击两次提交来避免在 Asp.net MVC 中重复提交表单

    我正在 Asp net MVC 中渲染一个带有提交按钮的表单 成功将记录添加到数据库后 页面将重定向 以下是代码 HttpPost public ActionResult Create BrandPicView brandPic if Mo
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • Symfony + Doctrine - 定义完整性约束错误时的错误消息

    当我尝试删除项目时出现完整性约束错误时 我试图显示一条不错的错误消息 我只想显示如下消息 而不是出现错误 500 您无法删除此内容 因为某些项目已链接到它 我已经搜索了一段时间 但我总是找到 如何解决此错误 的解决方案 我不想解决它 我只是
  • 跟踪表中的更改

    我的同事向我提出了一个我无法回答的问题 由于缺乏经验 该问题与跟踪表上相关字段的更改有关 假设我们有 3 个表 每个表有 20 个字段 让我们考虑一下这个示例 其中每个表都有 2 个字段 一个名为 LastUpdatedOn 另一个名为 L
  • 如何在字符串中存储颜色?

    如果颜色是人类可读格式 我想将颜色存储在字符串中 如果不是 则将其存储在 ToArgb 中 颜色是红色 然后将其存储在 Red 字符串中 如果颜色是绿色的某种变体 则将其存储为 ff40ff80 在运行时我想将此字符串转换回 Color 类
  • Rails 路由 - 如何将范围参数添加到 url_for 帮助器?

    我有资源生物 在视图和添加新生物的链接中是 link to Add new bio new admin bio 如果我将资源 bio放入这样的范围 namespace admin do scope bio type defaults gt
  • 使用 AutoMapper 映射字典

    鉴于这些类 我如何映射它们的字典 public class TestClass public string Name get set public class TestClassDto public string Name get set
  • Spring boot - 不是托管类型

    我使用 Spring boot JPA 并在启动服务时遇到问题 Caused by java lang IllegalArgumentException Not an managed type class com nervytech dia
  • sqlite3,IntegrityError:插入值时唯一约束失败

    为了防止我的数据库变得太大 我希望 sqlite 只插入尚未插入的值 我做了一些搜索 并认为最好的方法是使用 UNIQUE 约束 在我看来 插入不唯一的值时 sqlite 会崩溃 如何避免此错误并继续下一次提交 下面是一些相关代码 sql
  • Android 的自签名证书和 Loopj

    我正在尝试使用loopj http loopj com android async http制作async HTTP要求 效果很好 除了当我尝试使用自签名证书访问 https 网站时 我明白了 javax net ssl SSLPeerUn
  • 无法从 ArrayList 中删除[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions import java util c
  • .git/branches 文件夹的用途是什么?

    我一直认为 git branches目录用于遗留目的 并且 git 曾经使用该目录 但现在使用 git refs目录代替 这是真的 如果没有 那么该目录的目的是什么 因为我从未见过它被使用或引用 EDIT 我正在使用 git 版本 1 7
  • Cassandra静态列设计[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 静态列如何在 cassandra 内部存储 有人可以发布一个示例来讨论 cassandra 中静态列的
  • simd_float4x4 列

    我想平移平面而不旋转图像 出于某种原因 我的图像正在旋转 var translation matrix identity float4x4 translation colum 0 2 let transform simd mul curre
  • 合并排序初学者问题

    我现在有一个关于归并排序算法的问题 因为在原始算法中 将要排序的列表分为两个子列表并递归排序 现在我想将长度为 n 的列表分为 3 个长度为 n 3 的子列表 然后对这三个子列表进行递归排序 然后合并 怎么样 我只是简单地修改了原始算法 将
  • 如何在react-google-maps中弯曲折线?

    我是 React 新手 一直在使用 React google maps 包 我正在尝试弯曲连接两个地方的折线 在浏览完文档后 我尝试将曲线折线函数合并到 可编辑 属性下 这是弯曲折线的函数 var map var curvature 0 4
  • R: lapply 函数 - 跳过当前函数循环

    我正在对多个文件的列表使用 lapply 函数 有没有一种方法可以让我跳过当前文件上的函数而不返回任何内容 而直接跳到文件列表中的下一个文件 准确地说 我有一个 if 语句来检查条件 如果该语句返回 FALSE 我想跳到下一个文件 lapp
  • iTunes Connect:您的应用程序“*”(Apple ID:*)有一个或多个问题 - 电子邮件发送到整个用户列表、所有试飞用户,无论是什么应用程序

    今天 我通过 Xcode 向应用程序商店提交了一个新的测试应用程序 以便在 ItunesConnect 中查看 应用程序提交成功 但二进制文件在大约一分钟后被 ITC 拒绝 PNG 中具有 Alpha 通道的 AppIcons 存在问题 我
  • 如何在平面文件连接管理器上重新配置列信息?

    我有一个正在从平面文件读取数据的平面文件源 我们最近在此平面文件中添加了一个新列 平面文件数据被插入到数据库表中 为了适应目标组件中的新字段 我使用了ALTER TABLE语句将新列添加到表中 这是我所做的唯一改变 平面文件和目标组件之间的
  • 如何在sql server中获取分隔符之前的第一个值

    在其中一列中 我得到 2 个值 它们之间有一个分隔符 如何提取两个值 我有类似这个专栏的东西TRN02 is 115679 5757 我需要再次将分隔符之前和分隔符之后的值分成两个单独的列 有人可以帮我解决这个问题吗 您可以使用SUBSTR
  • 如何使用 Laravel 4.1 在字符串中查找#hashtags?

    我目前正在尝试过滤输入字符串以查找用户希望与其照片一起显示的单个主题标签 但是 我目前在数据库中插入的内容不正确 最好的情况是每个主题标签都保存在带有照片 ID 的新数据库行中 但是 我真的不知道该怎么做才能实现这一目标 hashtag n
  • 如何从带有 Array 属性的 Action 方法返回 Json?

    我正在尝试从操作方法返回一些 json 数据 我有一个员工对象 如下所示 public class Employee public int EmployeeID get set public string FirstName get set