【问题标题】:ASP.NET MVC format a JSON response from a dynamicASP.NET MVC 格式化来自动态的 JSON 响应
【发布时间】:2013-05-29 11:49:13
【问题描述】:

我正在使用 Dapper 返回一个 IEnumerable<dynamic> 对象,其签名为:

date: 01/01/2011
VarName = "VariableX"
VariableValue = "Value 1"

date: 01/01/2011
VarName = "VariableY"
VariableValue = "Value 2"

我希望将其转换为以下 JSON 响应:

{ date: 01/01/2011
 VariableX: Value 1
 VariableY: Value 2
}

..etc 并希望从哪里开始!

谢谢

编辑:

如果我将返回的对象展平,我会看到:

[
{"date":"\/Date(1331683206000)\/","VariableName":"Variable1","VariableValue":"ValueX"},
{"date":"\/Date(1331683206000)\/","VariableName":"Variable2","VariableValue":"ValueY"},
{"date":"\/Date(1331683206000)\/","VariableName":"Variable3","VariableValue":"ValueZ"}
]

我实际上在寻找指导的是如何将其翻转出来,因此它显示为:

[
{"date":"\/Date(1331683206000)\/","Variable1","ValueX"},
{"date":"\/Date(1331683206000)\/","Variable2","ValueY"},
{"date":"\/Date(1331683206000)\/","Variable3","ValueZ"},
]

编辑#2:将所需的输出固定为:

[
    {
        "date": "/Date(1331683206000)/",
        "Variable1": "ValueX"
    },
    {
        "date": "/Date(1331683206000)/",
        "Variable2": "ValueY"
    },
    {
        "date": "/Date(1331683206000)/",
        "Variable3": "ValueZ"
    }
]

编辑#3:

{
        "date": "/Date(1331683206000)/",
        "Variable1": "ValueX",
        "Variable2": "ValueY",
        "Variable3": "ValueZ"
    },
{
        "date": "/Date(1431683206000)/",
        "Variable1": "ValueX",
        "Variable2": "ValueY",
        "Variable3": "ValueZ"
    },
{
        "date": "/Date(151683206000)/",
        "Variable1": "ValueX",
        "Variable2": "ValueY",
        "Variable3": "ValueZ"
    }

【问题讨论】:

  • 你的问题不够清楚。目前缺少的是您到目前为止尝试过的代码以及您遇到的困难。
  • 谢谢 - 我添加了更多信息
  • 好的,现在更清楚了。您试图实现的目标是不可能的,因为您显示的是无效的 JSON。
  • 我的错误,粘贴格式错误,请看Edit 2
  • 好吧,现在说得通了。我更新了我的答案,以说明您如何投影您的收藏以达到预期的结果。

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


【解决方案1】:

我实际上在寻找指导的是如何将其翻转出来,因此它显示为:

[
    {"date":"\/Date(1331683206000)\/","Variable1","ValueX"},
    {"date":"\/Date(1331683206000)\/","Variable2","ValueY"},
    {"date":"\/Date(1331683206000)\/","Variable3","ValueZ"}
]

恐怕这是不可能的,因为您想要的输出是 invalid JSON。

如果你是这个意思:

[
    ["\/Date(1331683206000)\/","Variable1","ValueX"],
    ["\/Date(1331683206000)\/","Variable2","ValueY"],
    ["\/Date(1331683206000)\/","Variable3","ValueZ"]
]

那么这是完全不同的事情。


更新:

显示您实际所需的 JSON 后,您可以投影您的结果以实现它:

IEnumerable<dynamic> result = ....
var viewModel = result.Select(x =>
{
    var result = new Dictionary<string, object>();
    result["date"] = x.date;
    result[x.VariableName] = x.VariableValue;
    return result;
}).ToList();
return Json(viewModel, JsonRequestBehavior.AllowGet);

【讨论】:

  • 谢谢 - 向前考虑,是否可以按日期对变量进行分组,让它们代表我的编辑 #3?
  • 在您的更新 #3 中,您显示了一个 javascript 对象,而不是数组。如果输入中有 2 个不同的日期怎么办?你想要的输出是什么?
  • 如果有另一个日期时间段,它将显示另一个 JSON 组,因此本质上是对所有变量组合的不同日期进行分组 - 我已经更新了我的编辑
  • 感谢您的帮助 Darin,我将尝试通过在初始选择上按日期分组来稍微压缩 JSON - 再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
相关资源
最近更新 更多