json에 대한 더 큰 결과 (fastjson 사용)

.net c# dapper fastjson json

문제

===== 업데이트 됨 2012/20/20 =====

fastjson의 최신 버전은 이제 Dictionary<string, ?> 유형을 올바르게 처리 할 수 ​​있습니다. 이제 문제가 해결되었습니다.

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

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을 얻을 수 있음을 conn.Query<myClass> 시나리오에서 작동하지만 DB의 모든 테이블에 대해 수백 개의 클래스를 생성해야하는 것처럼 보입니다. 이상적인 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 인터페이스를 올바르게 구문 분석 할 수 있습니다. IDictionary의 일반 버전은 키 - 값 쌍 목록으로 구문 분석됩니다.


인기 답변

JSON에서 출력을위한 클래스를 작성한 다음 JSON에서 직렬화 할 수 있습니다.

//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);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow