c#JSON发布
我无法解决这个问题。如果我在HTTP Post之前使用NewtonSoft将对象序列化为JSON,我将从REST服务收到400。如果我只是将JSON作为字符串发布,那么在下面的代码中,它将作为“jsonx”工作。但是,如果我比较字符串“json”和“jsonx”,它们是相同的c#JSON发布,c#,json,rest,C#,Json,Rest,我无法解决这个问题。如果我在HTTP Post之前使用NewtonSoft将对象序列化为JSON,我将从REST服务收到400。如果我只是将JSON作为字符串发布,那么在下面的代码中,它将作为“jsonx”工作。但是,如果我比较字符串“json”和“jsonx”,它们是相同的 public async Task<String> TransferAsync(String fromAddress, Int64 amount, String toAddress, String assetI
public async Task<String> TransferAsync(String fromAddress, Int64 amount, String toAddress, String assetId)
{
Models.CoinPrism.TransferRequest request = new CoinPrism.TransferRequest()
{
fees = 1000,
from = fromAddress,
};
request.to[0] = new CoinPrism.Transfer()
{
address = toAddress,
amount = amount,
asset_id = assetId
};
String json = Newtonsoft.Json.JsonConvert.SerializeObject(request);
String jsonX = "{ \"fees\": 1000, \"from\": \"1zLkEoZF7Zdoso57h9si5fKxrKopnGSDn\", \"to\": [ { \"address\": \"akSjSW57xhGp86K6JFXXroACfRCw7SPv637\", \"amount\": \"10\", \"asset_id\": \"AHthB6AQHaSS9VffkfMqTKTxVV43Dgst36\" } ]}";
Uri baseAddress = new Uri("https://api.coinprism.com/");
using (var httpClient = new HttpClient { BaseAddress = baseAddress })
{
using (var content = new StringContent(jsonX, System.Text.Encoding.Default, "application/json"))
{
using (var response = await httpClient.PostAsync("v1/sendasset?format=json", content))
{
string responseData = await response.Content.ReadAsStringAsync();
return responseData;
}
}
}
}
错误的原因是它们是相同的字符串,但编码不同 您发送的字符串编码错误 1-序列化后,将字符串转换为ANSI编码(例如)
2-
using(var content=new StringContent(jsonX,System.Text.Encoding.ANSI,“application/json”)
如果json
等于jsonX
,那么你会得到同样的结果。你有没有试过fiddler查看发送的原始内容?你是手动编写“jsonX”的吗?我认为它可能与“json”不同例如,amount是Int64,在“json”中有“amount”:10,而在“jsonx”中有“amount”:“10”,就像一个字符串一样
public class TransferRequest
{
public Int64 fees { get; set; }
public String from { get; set; }
public Transfer[] to { get; set; }
public TransferRequest(Int32 n = 1)
{
this.to = new Transfer[n];
}
public TransferRequest(Transfer transfer)
{
this.to = new Transfer[1];
this.to[0] = transfer;
}
}
public class Transfer
{
public String address { get; set; }
public Int64 amount { get; set; }
public String asset_id { get; set; }
}