【发布时间】:2021-05-16 02:51:41
【问题描述】:
我从 API 中提取 JSON 代码
没有问题
JSON 输出就是这个字符串
\"[\\r\\n {\\r\\n \\\"PtsID\\\": 14061\\r\\n }\\r\\n]\"
但是当我尝试将其转换为数据表时
使用这行代码
这是我的代码
DataTable dt1 = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
我收到此错误
Newtonsoft.Json.JsonSerializationException: '意外的 JSON 令牌 读取数据表时。预期 StartArray,得到字符串。路径'',行 1,第 46 位。'
我尝试分析 json 字符串,但没有找到可能导致此错误的原因!!!
这是我的代码
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string json = client.GetStringAsync(url).Result;
DataTable dt1 = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
编辑
我在这里查看了这个答案
Deserialize a nested DataSet from Json String with Json.NET
并将我的代码更改为此
class MyTableUtilClass
{
public string PtsID { get; set; }
public DataTable Table { get; set; }
}
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string json = client.GetStringAsync(url).Result;
var myUtil = JsonConvert.DeserializeObject<MyTableUtilClass>(json);
DataTable myTable = myUtil.Table;
但是当到达这条线
var myUtil = JsonConvert.DeserializeObject<MyTableUtilClass>(json);
我收到此错误
Newtonsoft.Json.JsonSerializationException: '错误转换值 "[ { "PtsID": 14061 } ]" 输入 'Encoder.FrmCoder+MyTableUtilClass'。路径 '',第 1 行,位置 46。'
这与我之前遇到的错误相同..
有什么办法吗?
编辑
在 API 中,我将数据表转换为 JSON
所以我可以将 JSON 转换回应用程序中的数据表
这是来自 API 的代码
[Route("api/SearchSelect")]
public string Get(string P1 = null, string P2 = null, string P3 = null, string P4 = null)
{
SqlConnection conn = new SqlConnection(gDBConn);
SqlCommand cmd = new SqlCommand("SearchSelect", conn);
cmd.CommandTimeout = 0;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@PtsName", P1));
cmd.Parameters.Add(new SqlParameter("@PtsNo", P2));
cmd.Parameters.Add(new SqlParameter("@RepCode", P3));
cmd.Parameters.Add(new SqlParameter("@RepText", P4));
try
{
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
var dt = new DataTable();
dt.Load(rdr);
List<DataRow> result = dt.AsEnumerable().ToList();
rdr.Close();
string json = DataTableToJSON(dt);
return json;
}
catch (Exception ex)
{
return ex.Message;
}
}
public string DataTableToJSON(DataTable dt)
{
string JSONString = string.Empty;
string json = JsonConvert.SerializeObject(dt, Formatting.Indented);
return json;
}
【问题讨论】:
-
我不知道为什么有人会否决您的问题。我已经从 -1 投票到 0 :)