2012-12-20 52 views
0

我正在使用MVC4控制器在服務器上讀取一個.json文件,其中包含(其他內容)過濾器條件的聲明Kendo UI數據源。ASP.NET MVC4和Kendo UI「過濾器」:從對象類型返回JSON

我想將它加載到一個對象中,並通過JsonResult將它發送給客戶端。

這是JSON部我想發送:

{ 
    activate: { 
     logic: "or", 
     filters: [ 
      { field: "fieldA", operator: "eq", value: 100 }, 
      { 
       logic: "and", 
       filters: [ 
        { field: "fieldA", operator: "lt", value: 100 }, 
        { field: "fieldB", operator: "eq", value: true } 
       ] 
      } 
     ] 
    } 
} 

我所定義的類來映射我的JSON數據:

public class ItemModel 
{ 
    public Object activate { get; set; } 
} 

作爲I型使用對象,因爲該值包含可能會有所不同,它不是遞歸結構或包含保留字作爲「運算符」。

我然後通過讀取JSON:

JsonSerializer serializer = new JsonSerializer(); 
ItemModel i = serializer.Deserialize<ItemModel>(new JsonTextReader(reader)); 

此時,由於這一事實,我定義的「對象」作爲針對類型「激活」 JSON對象,我在我的變量中發現其是指一個對象,作爲它的基礎,到「Newtonsoft.Json.Linq.JContainer」,它傳遞給「Json(i)」,在客戶端產生類似於[[[]],[[[[[]],[[[ ]],[[]]],[[[]]「。

是否有可能向客戶端返回真正的json數據而不是「Object」對象(或Json()解析器遇到麻煩的等價物)的序列化? 如何?

謝謝

回答

0

我迄今發現的最好的方法是使用「JsonConvert.SerializeObject」對返回的對象:

JsonSerializer serializer = new JsonSerializer(); 
ItemModel i = serializer.Deserialize<ItemModel>(new JsonTextReader(reader)); 
JsonConvert.SerializeObject(i, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });