【发布时间】:2018-04-24 16:49:13
【问题描述】:
大家好,
我使用的是 XCode 版本 9.2 (9C40b)、Visual Studio 2017 Pro 15.6.6 和 Xamarin 11.9.1.24 的降级版本。
上下文如下:手机对中间层进行 REST 调用,该中间层查询数据库并返回以 JSON 形式序列化的 DataTable。手机会将内容反序列化为 DataTable。
我正在寻找一种方法来解决这个问题,但没有运气。我看过多个类似的帖子,但没有一个解决方案对我有用。我认为这是 Xamarin 关于 iOS 的限制,如 here 所述。但我想知道是否有办法解决它。这是导致引发异常的代码:
在 ExecuteQuery 函数中我有这段代码
公共异步任务ExecuteQuery() ...
try
{
var stringContent = new StringContent(JsonConvert.SerializeObject(_Items.query), Encoding.UTF8, "application/json");
var response = await client.PostAsync(uri, stringContent);
if (response.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<DataTable>(content);
}
}
catch (Exception exception) when (exception is System.Net.WebException ||
exception is HttpRequestException ||
exception is SocketException)
{
if (exception.InnerException is System.Net.WebException)
{
System.Net.WebException e = exception.InnerException as System.Net.WebException;
Console.WriteLine(e.Status);
throw e;
}
}
catch (Exception ex)
{
Debug.WriteLine(@" ERROR {0}", ex.Message);
}
我得到的异常如下:
找不到类型“System.ComponentModel.ComponentConverter”的构造函数。
它到达了这一行:
return JsonConvert.DeserializeObject(content);
请记住,上面的代码在模拟器上运行良好。 任何帮助将不胜感激。
谢谢
编辑: 返回值用于我的代码的以下部分:
Task<DataTable> myTaskDataTable = Querymanager.ExecuteQuery();
DataTable myDataTable = await myTaskDataTable;
if (myDataTable != null)
{
vListBL = new ObservableCollection<MyItem>();
foreach (DataRow row in myDataTable.Rows)
{
MyItem vItem = new MyItem();
vItem.value1 = row.ItemArray[0].ToString();
vItem.value2 = row.ItemArray[2].ToString();
vListBL.Add(vItem);
}
}
content 变量包含一个表单数组
[{"COLUMN_NAME1":"value1","COLUMN_NAME2":"value2",...},{...},{...}]
这是我正在查询的数据库表的内容。数组中的每个元素代表一行。在数组的每个元素中,我都有 columnX 冒号 valueY 用逗号分隔。
【问题讨论】:
-
能否添加DataTable类的定义?
-
似乎链接的json字符串值与DataTable类不匹配,请附上
content值和模型类DataTable。 -
DataTable 类是从 Microsoft .NET Framework 中找到的here 并且内容被调用函数使用,如帖子的编辑版本所示
标签: c# ios xamarin.forms