2017-08-24 69 views
0

我有任何方法:序列化字典JSON

IExternalResponse<ReserveResponse> ReserveFreePlacement(IDictionary<int,int> ticketsInfo) { 
    var request = new RestRequest("", Method.POST); 
    request.AddJsonBody(
     new 
     { 
      command = "RESERVATION", 
      categoryQuantityMap = JsonConvert.SerializeObject(ticketsInfo), 
     }); 
    return GetResult<ReserveResponse>(request, RestClient, "Reservation"); } 

请求是RestSharp.RestRequest,ticketsInfo是具有值的字典:

Key:12041, Value:1 
Key:12040, Value:2 

命令 “AddJsonBody” i之后具有在request.Parameters 1参数

application/json={ 
    "command": "RESERVATION", 
    "categoryQuantityMap": "{\"12041\":1,\"12040\":1}", 
    "versionCode": "1.0" 
} 

,但我需要

application/json={ 
    "command": "RESERVATION", 
    "categoryQuantityMap": { 
    "12041":1, 
    "12040":2 
    }, 
    "versionCode": "1.0" 
} 

我如何得到正确的?

+0

您的'categoryQuantityMap'具有哪种类型?如果它是一个字符串,那么它将被转义。你可以输入你的'categoryQuantityMap'到实际的数据吗? –

+0

'categoryQuantityMap = JsonConvert.SerializeObject(ticketsInfo)''只是将字典转换为JSON字符串。你尝试过'categoryQuantityMap = ticketsInfo'吗? – crashmstr

+0

我可以更改类型ticketsInfo以获得期望的结果 –

回答

0

所以,AddJsonBody实现方法序列化的问题。当我通过处理序列化对象然后通过处理添加正文请求 - 一切正确:

IExternalResponse<ReserveResponse> ReserveFreePlacement(IDictionary<int,int> ticketsInfo) 
{ 
    var jsonBody = JsonConvert.SerializeObject(new 
    { 
     command = "RESERVATION", 
     categoryQuantityMap = ticketsInfo, 
     versionCode = "1.0" 
    }); 
    var request = new RestRequest("", Method.POST); 
    request.AddParameter("application/json", jsonBody, ParameterType.RequestBody); 
    return GetResult<ReserveResponse>(request, RestClient, "Reservation"); 
}