HttpClient を使用して、SalesForce RESTApi 経由で新しいアカウントを POST しようとしていますが、次のエラーが表示されます。
メッセージ: 「[行:1、列:1] の VALUE_STRING トークンから SObject をデシリアライズできません」。errorCode: "JSON_PARSE_ERROR".
WebRequest と HttpClient のテストに同じ json を使用しています。WebRequest を使用すると、うまく機能します。
HttpClient を使用した私のコードは次のとおりです。
var uri = "https://na15.salesforce.com/services/data/v27.0/sobjects/Account";
var acc = new Account();
acc.Name = "RestAPIHttpClient";
var ser = new JavaScriptSerializer();
var json = ser.Serialize(acc);
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + binding.SessionHeaderValue.sessionId);
var response = await client.PostAsJsonAsync(uri, json);
var stringresponse = await response.Content.ReadAsStringAsync();
Console.WriteLine(stringresponse);
シリアル化するアカウント クラスは非常に単純です。
private class Account
{
public string Name { get; set; }
}
アップデート:
PostAsJsonAsync のほかに PostAsync を使用するようにコードを変更し、コンテンツに JsonFormatter を追加したところ、動作するようになりました。PostAsJsonAsync が機能しない理由を知っていただければ幸いです。
System.Net.Http.Formatting.MediaTypeFormatter jsonFormatter =
new System.Net.Http.Formatting.JsonMediaTypeFormatter();
System.Net.Http.HttpContent content =
new System.Net.Http.ObjectContent<Account>(acc, jsonFormatter);
var response = await client.PostAsync(uri, content);