gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:54:19 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com