1

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

0 に答える 0