2013-03-07 62 views
4

我有一个.NET字典包含来自实体框架中的SQL函数的项目。这里是我的代码项目添加到字典:字典JSON格式

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}} 

Howeve R I在找东西,返回类似:

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

+1

仅供参考,这是一个.NET字典,而不是C#字典。 – 2013-03-07 18:10:45

+1

以这种方式格式化JSON会有什么用?你想有一个对象数组像'{ColumnName:“FooResult”,ColumnValue:3.123}' – Floremin 2013-03-07 18:13:26

+0

您当前预期的JSON结果无效,因为字段名称是重复的。 – mellamokb 2013-03-07 18:15:02

回答

2

我想你忘了添加{ & }每对ColumNameColumnValue之间,并且serialze它作为一个阵列。

相反,您的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" } ] 
}