私は既存のプロセスの1つで使用されているHTTPクライアントライブラリを作成しました。 JSONコンテンツを含むPOSTリクエストを本文に送信します。リクエストの内容とオブジェクト自体を埋め込むコードは以下のようになります。ObjectContentの問題を使用してJSONをシリアライズ
…
HttpRequestMessage httpMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost");
MyWireObject request = new MyWireObject()
{
Email = "[email protected]",
Document = JToken.Parse(@"{""content"": ""data"", ""content2"": ""data2""}")
};
httpMessage.Content = new ObjectContent(typeof(MyWireObject), request, new JsonMediaTypeFormatter());
//httpMessage.Content = new StringContent(JToken.FromObject(request).ToString(), Encoding.UTF8, "application/json");
var content = httpMessage.Content;
string jsonContent = content.ReadAsStringAsync().Result;
…
public class MyWireObject
{
[JsonProperty(PropertyName = "Email")]
public string Email
{
get; set;
}
[JsonProperty(PropertyName = "Document")]
public JToken Document
{
get; set;
}
}
私が書いたスタンドアロンのexeでクライアントライブラリを使用すると、JSONはうまくシリアル化されます。しかし、私は既存のプロセスと統合する場合、(jsonContentで捕獲された)結果は次のようなものになります。
{"Email":"[email protected]","Document":{"content":[],"content2":[]} }
を基本的には、JTokenフィールドのすべての値が失われます。コメントされた行のように、ObjectContentの代わりにStringContentを使用すると、動作します。
私のスタンドアロンのexeと既存のプロセスとの違いは、プロセスがネットワークサービスアカウントで動作することです。これはアカウントの許可によるものですか?または私はそれを間違って使用していますか?または.NETやNewtonsoft.Json.Linqの既知のバグが原因ですか?
ありがとうございました。