c# - 字典 JSON 格式

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

我有一个 .NET 字典,其中包含来自 Entity Framework 中的 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>();
}

最后是我的 Controller :

    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 输出?

最佳答案

我想你忘记了在每对 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);
    }
}

得到的序列化值是这样的:

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

关于c# - 字典 JSON 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15278594/

相关文章:

javascript - 使用 javascript asp.net 在 gridview 的同一行中选中复选框时如何验证 gridview 中的文本框

c# - 为什么我不能向具有 EventHandler 属性类型的 PropertyChanged 添加处理程序(通过引用方法)

c# - ASP.NET MVC : Hidden field value does not get rendered using HtmlHelper. 隐藏

html - 我可以在 html 中使用 <ul> 和 <li> 以表格形式呈现吗?

javascript - 如何使用 javascript 读取包含数组数据的本地 json 文件?

asp.net-mvc - 从 ApiController 返回 JSON 流

c# - 在测试运行期间从 MSTest 中的代码调用类别或测试名称

javascript - C# 到 Javascript : What the equivalent of `new MultipartFormDataContent();`

c# - 如何在 C# 中获取下一个(或上一个)枚举值

c# - Azure VM 上 FtpWebRequest 处于事件模式 (UsePassive = False) 时为 "500 Syntax error, command unrecognized"