首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将结果转换为json (使用fastjson)

将结果转换为json (使用fastjson)
EN

Stack Overflow用户
提问于 2016-05-15 16:13:55
回答 2查看 7.6K关注 0票数 5

=====更新2016年8月20日===== 最新版本的correctly现在可以正确处理Dictionary<string, ?>类型,我的问题现在解决了。 =============================

我使用query来序列化Dapper的查询结果,DB中的表有如下所示的数据:

代码语言:javascript
复制
id | name | price
1  | x    | 100
2  | y    | 200
....

当我

代码语言:javascript
复制
using Dapper;
using fastJSON;
// ....
JSON.Parameters.KVStyleStringDictionary = false;
// ....
result = JSON.toJSON(conn.Query("SELECT * FROM tableX"));

我希望结果是:

代码语言:javascript
复制
[{"id":1,"name":"x","price":100},{"id":2,"name":"y","price":200},...]

然而,实际成果产出:

代码语言:javascript
复制
[[{"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 88的回答表明,我可以创建一个定制的类来映射表,并使用conn.Query<myClass>来获得正确的json,尽管它适用于这个场景,但看起来我必须为DB中的每个表创建数百个类才能获得理想的json结果,这对我来说确实很累人。(谢谢任何方式:P)

任何替代解决方案都将是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-16 02:57:16

我找到了一个解决方案来处理它(尽管它可能会失去一些效率),为此,我编写了我自己的QueryEx方法,查询结果中的每一行都是一个IDictionary对象:

代码语言:javascript
复制
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));
}

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

原因: fastJSON只能正确解析IDictionary接口,任何IDictionary的泛型版本都将被解析为键值对列表。

票数 6
EN

Stack Overflow用户

发布于 2016-05-15 16:31:35

尝试用JSON为输出创建一个类,然后可以在JSON中序列化它。

代码语言:javascript
复制
//your class
    public class Item
    {
        int ID;
        public string Name;
        public double Price;
    }
//code:
    List<Item> = conn.Query<Item>("SELECT * FROM tableX").AsList();
    var result = Json(Item, JsonRequestBehavior.AllowGet);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37240633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档