簡體   English   中英

JsonConvert.DeserializeObject <DataTable> 引發異常

[英]JsonConvert.DeserializeObject<DataTable> throws an exception

祝大家有美好的一天

我正在使用XCode版本9.2(9C40b),Visual Studio 2017 Pro 15.6.6和Xamarin 11.9.1.24的降級版本。

上下文如下:電話對中間層進行REST調用,該中間層查詢數據庫並返回以JSON序列化的DataTable。 手機會將內容反序列化為數據表。

我正在尋找一種方法來解決此問題,但沒有運氣。 我看到過多個類似的帖子,但是沒有一種解決方案適合我。 我相信這是Xamarin關於iOS的作為規定的限制在這里 但是我想知道是否存在解決它的方法。 這是導致引發異常的代碼:

在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'的構造方法。

它到達了這一行:

返回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。

由於這些限制 ,iPhone的內核阻止了應用程序動態生成代碼。iPhone上的Mono不支持任何形式的動態代碼生成。

我們必須手動創建模型類,並將其用於反序列化,建議您使用json2csharp

JsonConvert.DeserializeObject<List<RootObject>>(content);

public class RootObject
{
    public string COLUMN_NAME1 { get; set; }
    public string COLUMN_NAME2 { get; set; }
    ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM