【问题标题】:Dictionary JSON Formatting字典 JSON 格式
【发布时间】:2013-03-07 18:09:15
【问题描述】:

我有一个 .NET 字典,其中包含实体框架中 SQL 函数中的项目。这是我将项目添加到字典的代码:

    public FooViewModel GetFoo()
    {

        var fooresults = new FooResultsViewModel();

        using (var db = new DBEntities())
        {
            var results = db.FunctionResults().ToList();
            foreach (var d in results)
            {
                foo.a.Add(d.ColumnName, d.ColumnValue);
            }


        }
        return fooresults;

这是我的模型:

public class FooViewModel : GraphViewModel
{
    public FooResultsViewModel() { }
    public Dictionary<string, decimal> a = new Dictionary<string, decimal>();
}

最后是我的控制器:

    public virtual JsonResult GetData()
    {
        var fooresults = new FactSurveryResultsQueries().GetAverages();
        return new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = fooresults };
    }

这是返回的 JSON:

{"a":
{"FooResult1":3.579831,
"FooResult2":3.359243,
"FooResult3":3.720588,
"FooResult4":3.636554,
"FooResult5":3.285714,
"FooResult6":3.758403,
"FooResult7":3.262605}}

但是我正在寻找返回如下的东西:

{"a":
{ColumnName:"FooResult1", 
ColumnValue:3.579831,
ColumnName:"FooResult2",
ColumnValue:3.359243,
ColumnName:"FooResult3",
ColumnValue:3.720588,
ColumnName:"FooResult4",
ColumnValue:3.636554,
ColumnName:"FooResult5",
ColumnValue:3.285714,
ColumnName:"FooResult6",
ColumnValue:3.758403,
ColumnName:"FooResult7",
ColumnValue:3.262605}}

有没有办法为第二个结果格式化 JSON 输出?

【问题讨论】:

  • 仅供参考,这是一个 .NET 字典,而不是 C# 字典。
  • 这样格式化的 JSON 有什么用?你想要一个对象数组,比如{ ColumnName: "FooResult", ColumnValue: 3.123 }
  • 您当前预期的 JSON 结果无效,因为字段名称重复。
  • 我想要这种格式的 JSON 的原因是我通过 AJAX 调用来使用它,然后以可视方式呈现它。为此,我需要为可视化脚本确定要绘制的值是什么,以及要沿轴放置的类别(名称)是什么。我希望这会有所帮助。
  • 感谢您的澄清,我只在 .NET 堆栈上待了很短时间,我会记得将它们分开。

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


【解决方案1】:

我想你忘记在每对ColumNameColumnValue 之间添加{},并将其序列化为一个数组。

相反,您的 JSON 无效或不是 JSON,因为您多次重复相同的属性名称。

如果我是对的,这是一个按照你想要的方式塑造字典的测试用例:

[TestClass]
public class CustomDictionaryJsonSerialization
{
    [TestMethod]
    public void SerializeDictionary()
    {
        Dictionary<string, object> dict
            = new Dictionary<string, object> {{"col1", 1}, {"col2", "two"}};

        var nameValues = dict.Keys.Select(k =>
            new {ColumnName = k, ColumnValue = dict[k]});

        var toSerialize = new {a = nameValues.ToList()};

        string serialized = JsonConvert.SerializeObject(toSerialize);

        Assert.IsNotNull(serialized);
    }
}

得到的serialized值是这样的:

{"a":
  [ { "ColumnName":"col1", "ColumnValue":1 },
    { "ColumnName":"col2", "ColumnValue":"two" } ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多