【发布时间】:2018-01-27 20:53:54
【问题描述】:
我有一个正在发布到 Web API 的客户端。当收到 POST 内容时,JSON 使用属性的私有成员名称而不是公共属性。 (客户端应用程序使用的是 Asp.Net-Web-api2 库,而 Web API 本身是使用 IIS7.5 上的 IHttpHandler 实现的,不是 MVC 样式的应用程序,代码也在使用现有的 Usage 类之前TFS 事故导致我重新编码,现在出现了奇怪的行为)
//Object I am passing
[Serializable]
public class Usage
{
private string _user;
private string _trackingUnit;
public string User {get {return _user;} set {_user = value;}}
public string TrackingUnit { get{return _trackingUnit;} set { _trackingUnit = value;}}
}
我使用以下方法发帖
Usage usage = new Usage();
usage.User = "pete";
usage.TrackingUnit = "unit of work";
HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsJsonAsync(url, usage);
我正在使用以下方式接收 POST
byte[] postData = context.Request.BinaryRead(context.Request.ContentLength);
string strData = Encoding.UTF8.GetString(postData);
Usage newUsage = JsonConvert.DeserializeObject<Usage>(strData);
当我检查 strData 时,它如下所示,这会导致反序列化返回一个未填充的 Usage 对象
{"_user":"pete","_trackingUnit":"unit of work"}
我期待
{"User":"pete","TrackingUnit":"unit of work"}
注意事项:
如果我新建了一个 Usage 对象并尝试在 Web API 中对其进行序列化并返回其格式正确的字符串
JsonConvert.SerializeObject(usage);
{"User":"pete","TrackingUnit":"unit of work"}
此外,如果我尝试在客户端应用程序中进行 JsonConvert.Serialize,它也可以按预期工作
【问题讨论】:
-
在发布之前如何初始化“使用”对象?
-
我已经用将要使用的代码更新了问题。
-
您可以尝试两件事:1) 检查您的默认 JSON 序列化程序。 2)由于您可以使用
Netwonsoft.Json.JsonConvert.Serialize成功序列化,因此您可以构建自己的HttpRequestMessage并改用SendAsync()。 -
@Jasen,如果我没有解决根本问题(谢谢 dbc!),那将是一个很好的解决方法,感谢您的帮助!
标签: c# json asp.net-web-api2