【发布时间】:2018-06-16 14:40:38
【问题描述】:
我在 MAC 上安装了 Visual Studio Community Edition 2017,正在开发 Xamarin.iOS 应用程序,但遇到了奇怪的问题。
- 我有 PCL,我在其中创建了 HttpClient 及其模型(每个 API 调用的请求和响应)。
- 我正在使用 PCL 中的模型(初始化和分配值)从 Xamarin.iOS 应用程序生成发布请求对象。
- 我正在从 Xamarin.iOS 应用调用 post 方法
- 现在我得到了在 PCL 中发布请求对象始终为空!!当读取为字符串时,它是
{} - 然后我正在尝试使用其中一个模型(包含
EmailAddress和FullName)来跟踪问题,因此在调用客户端发布方法之前在 Xamarin.iOS 应用程序中添加了Console.WriteLine(searchRequest.EmailAddress)(只是为了知道源在哪里本期) - 现在在 PCL 中,我只得到
EmailAddress字段{"EmailAddress" : "sample@domain.com"} - 在我尝试添加
Console.WriteLine(searchRequest.FullName)之后,我能够获得正确的对象{"EmailAddress" : "sample@domain.com", "FullName" : "Sample Full Name"}!!!
来自 Xamarin.iOS 应用的请求:
APIClient client = new APIClient();
SearchRequest searchRequest = new SearchRequest
{
EmailAddress = "sample@domain.com",
FullName = "Sample Full Name"
};
var result = await client.Search(searchRequest);
PCL 客户端模型对象:
public class SearchRequest
{
public string FullName {get; set;}
public string EmailAddress {get;set}
}
PCL HTTP 客户端:
public async Task<SearchResult> Search(SearchRequest requestObj)
{
SearchResult res = new SearchResult();
StringContent content = new StringContent(JsonConvert.SerializeObject(requestObj, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }), Encoding.UTF8, "application/json"); // Content as string will be {}
HttpResponseMessage response = await client.PostAsync($"{baseURL}ApplicationSearch", content);
return JsonConvert.DeserializeObject<SearchResult>(responseString);
}
如果我在 Xmarin.iOS 应用程序中在 var result = await client.Search(searchRequest); 之后添加以下两行:
Console.WriteLine(searchRequest.EmailAddress);
Console.WriteLine(searchRequest.FullName);
现在StringContent 对象将具有:
{"EmailAddress" : "sample@domain.com", "FullName" : "Sample Full Name"}
谁能解释一下这里发生了什么?
【问题讨论】:
标签: c# visual-studio xamarin xamarin.ios visual-studio-2017