2013-03-07 3 views
4

У меня есть словарь .NET, содержащий элементы из SQL-функции в Entity Framework. Вот мой код, чтобы добавить элементы к словарю:Словарь 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 г Я ищу что-то, что возвращается как:

{"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

FYI, это .NET словарь, а не словарь C#. –

+1

Каким будет использование JSON в этом формате? Вы хотите иметь массив таких объектов, как '{ColumnName:« FooResult », ColumnValue: 3.123}' – Floremin

+0

Ваш текущий ожидаемый результат JSON недействителен, потому что имена полей дублируются. – mellamokb

ответ

2

Я полагаю, вы забыли добавить { & } между каждой парой ColumName, ColumnValue и 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" } ] 
}