0

我正在使用 MVC4 控制器在服务器上读取一个 .json 文件,该文件包含(除其他外)要在 Kendo UI 数据源上使用的过滤条件声明。

我想将它加载到一个对象中,并通过 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; }
} 

作为我使用 Object 的类型,因为其中包含的值可能会有所不同,它不是递归结构或包含保留字作为“运算符”。

然后我通过以下方式阅读了json:

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

此时,由于我将“Object”定义为“activate”json 对象的类型,我在变量中发现了一个对象,该对象作为其基础引用“Newtonsoft.Json.Linq.JContainer”,其中,传递给“Json(i)”,在客户端上的结果类似于“[[[]]、[[[[[]]、[[]]、[[]]]、[[[]]”。

是否可以将真实的 json 数据返回给客户端,而不是“对象”对象的序列化(或 Json() 解析器遇到问题的等效对象)?如何?

谢谢

4

1 回答 1

0

到目前为止,我发现的最好方法是在返回的对象上使用“JsonConvert.SerializeObject”:

JsonSerializer serializer = new JsonSerializer();
ItemModel i = serializer.Deserialize<ItemModel>(new JsonTextReader(reader));
JsonConvert.SerializeObject(i, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
于 2013-01-10T13:30:25.597 回答