gpt4 book ai didi

c# - Dapper 结果到 json(使用 fastjson)

转载 作者:太空狗 更新时间:2023-10-29 23:05:57 30 4
gpt4 key购买 nike

===== UPDATED 8/20/2016 =====

latest version of fastjson can now handle Dictionary<string, ?> type correctly, my problem is solved now.

=============================

我正在使用 fastjson 序列化来自 Dapper 的查询结果,DB 中的表有这样的数据:

id | name | price
1 | x | 100
2 | y | 200
....

当我

using Dapper;
using fastJSON;
// ....
JSON.Parameters.KVStyleStringDictionary = false;
// ....
result = JSON.toJSON(conn.Query("SELECT * FROM tableX"));

我想要的结果是:

[{"id":1,"name":"x","price":100},{"id":2,"name":"y","price":200},...]

然而实际结果输出:

[[{"Key":"id","Value":1},{"Key":"name","Value":"x"},{"Key":"price","Value":100}],
[{"Key":"id","Value":2},{"Key":"name","Value":"y"},{"Key":"price","Value":200}]...]

生成了很多看起来多余的键值对。

有没有办法得到正确的结果?

或者我应该切换到另一个 JSON 序列化器?

========== 已更新 ==========

makubex88 的回答表明我可以创建一个映射表的自定义类并使用 conn.Query<myClass>为了获得正确的 json,虽然它适用于这种情况,但看起来我必须为数据库中的每个表创建数百个类才能获得理想的 json 结果,这对我来说确实很累人。 (无论如何感谢:P)

我们将不胜感激任何替代解决方案!

最佳答案

我找到了一个解决方案来处理它(但是它可能会降低一些效率),为了实现这个,我写了我自己的 QueryEx 方法,查询结果中的每一行都是一个 IDictionary 对象:

public IEnumerable<IDictionary> QueryEx(IDbConnection conn, string sql, object argSet = null) {
var result = conn.Query(sql, argSet) as IEnumerable<IDictionary<string, object>>;
return result.Select(r => r.Distinct().ToDictionary(d => d.Key, d => d.Value));
}

result = JSON.toJSON(conn.QueryEx("SELECT * FROM tableX"));
// output: [{"id":1,"name":"x","price":100},{"id":2,"name":"y","price":200},...]

原因:fastJSON 只能正确解析 IDictionary 接口(interface),任何通用版本的 IDictionary 都会被解析为键值对列表

关于c# - Dapper 结果到 json(使用 fastjson),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240633/

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