生成列表的 Web api 函数,Web api 通过 Telerik DataSourceResult 返回该列表
List<BsonDocument> objs = _mongoStore.GetData(id, newTime);
DataSourceResult result = objs.ToDataSourceResult(request);
return Json(result);
当我在调试器中查看 objs 变量时,我看到它以下列方式表示;这就是我们希望 Json 返回 web api 数据的方式:
{ "Computer" : "Computer1", "OSVersion" : "Windows" }
然而,当 Json() 函数序列化 objs 对象时,它会添加名称值字段,如下所示:
[[{"Name":"Computer","Value":"Computer1"},{"Name":"OSVersion","Value":"Windows"}]]
这种对名称、值、字段的扩展打破了我们使用的 future Json 解析 API。我们如何序列化它,以便它只使用名称和值的实际值,而不是添加特定的名称和值字段? IE。我们希望返回的 Json 类似于调试器所看到的:
{ "Computer" : "Computer1", "OSVersion" : "Windows" }
我知道可以这样做:
string rawjson = objs.ToJson(new JsonWriterSettings {OutputMode = JsonOutput.Strict});
但不确定如何在全局范围内使用类似的东西,所以如果您要返回 Telerik DataSourceResult,例如:
DataSourceResult result = objs.ToDataSourceResult(request);
return Json(Result);
会导致序列化恰好返回正确的 Json 而没有添加名称值字段。
谢谢!
最佳答案
看起来您实际上可以获取结果 DataSourceResult 对象并对它执行 Mongo .ToJson,然后将 Web API 作为原始 json 字符串内容返回。
如此固定它会是这样的
List<BsonDocument> objs = _mongoStore.GetData(id, newTime);
DataSourceResult result = objs.ToDataSourceResult(request);
var finalResult=result.ToJson(new JsonWriterSettings { OutputMode = JsonOutputMode.Strict });
return Content(finalResult);
不确定是否有更好的方法,但这似乎可行。如果其他人知道更好的方法,很乐意将其更改为答案。
关于C# asp.net web api 返回 List<BsonDocument> 如何防止 Mongodb 序列化程序添加名称值字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667862/