C# asp.net web api 返回 List<BsonDocument> 如何防止 Mongodb 序列化程序添加名称值字段?

标签 c# asp.net json mongodb

生成列表的 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/

相关文章:

c# - nHibernate,将两个属性映射到同一个类

c# - 用户输入月份编号 1-12 并且 http post 返回月份名称的应用程序不起作用

c# - 创建一个json格式的对象

css - 从数据库中填充 asp.net 网站中的 Bootstrap 导航栏

C++ POCO - 如何美化一个JSON?

c# - 使用 *sql* 子查询的 Entity Framework 查询

c# - 绑定(bind)到内部属性?

jquery - 如何使用 jQuery 从 ASP.NET 代码后面调用非静态方法

javascript - 使用 jquery 从 json 中删除特定行

php - 如何避免在 Symfony 3 中通过 JSON 返回用户密码