【发布时间】:2017-06-27 00:30:46
【问题描述】:
我编写了一个 HTTP 客户端库,供我们现有的一个进程使用。它发送一个在正文中包含 JSON 内容的 post 请求。填充请求内容和对象本身的代码如下所示。
…
HttpRequestMessage httpMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost");
MyWireObject request = new MyWireObject()
{
Email = "user@test.com",
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":"user@test.com","Document":{"content":[],"content2":[]} }
基本上,JToken 字段的所有值都会丢失。如果我使用 StringContent 而不是 ObjectContent,如注释行所示,它可以工作。
我能想到的我的独立 exe 和现有进程之间的一个区别是该进程在网络服务帐户下运行。这是由于帐户许可吗?还是我用错了?还是由于 .NET 或 Newtonsoft.Json.Linq 中的一些已知错误?
谢谢。
【问题讨论】:
标签: c# json asp.net-web-api serialization json.net