C# Json 反序列化异常(“将值“id”转换为类型“Eng_Tab.JsonData”时出错。路径“[0]”,第 1 行,位置 5。”)

Posted

技术标签:

【中文标题】C# Json 反序列化异常(“将值“id”转换为类型“Eng_Tab.JsonData”时出错。路径“[0]”,第 1 行,位置 5。”)【英文标题】:C# Json Deserialize exception ("Error converting value "id" to type 'Eng_Tab.JsonData'. Path '[0]', line 1, position 5.") 【发布时间】:2016-06-22 08:13:21 【问题描述】:

我是 C# 的 Json 新手。我正在尝试反序列化 JSON 字符串以显示到数据网格中。 我成功地从服务器获取了 JSON 字符串,但是在尝试反序列化它时,它抛出了这个异常:

Newtonsoft.Json.JsonSerializationException:转换值时出错 “id”键入“Eng_Tab.JsonData”。路径“[0]”,第 1 行,位置 5。---> System.ArgumentException:无法从 System.String 转换或转换 到 Eng_Tab.JsonData。

这是数据类:

公共类 JsonData 公共 int id 获取;放; 公共字符串 lec 得到;放; 公共字符串 sec1 获取;放; 公共字符串 sec2 获取;放; 公共字符串 sec3 获取;放; 公共字符串 sec4 获取;放; 公共字符串 sec5 获取;放; 公共字符串 sec6 获取;放; 公共字符串 sec7 获取;放; 公共字符串 sec8 获取;放; 公共字符串 sec9 获取;放; 公共字符串 sec10 获取;放;

    public int h  get; set; 
    public int h1  get; set; 
    public int h2  get; set; 
    public int h3  get; set; 
    public int h4  get; set; 
    public int h5  get; set; 
    public int h7  get; set; 
    public int h8  get; set; 
    public int h9  get; set; 
    public int h10  get; set; 

    public int m  get; set; 
    public int m1  get; set; 
    public int m2  get; set; 
    public int m3  get; set; 
    public int m4  get; set; 
    public int m5  get; set; 
    public int m6  get; set; 
    public int m7  get; set; 
    public int m8  get; set; 
    public int m9  get; set; 
    public int m10  get; set; 


这是 Json 字符串:

["id":"1","h":"7","m":"0","lec":"","h1":"0","m1":"0" ,"sec1":"","h2":"10","m2":"0","sec2":"Abdelrahman Mohamed401119343000","h3":"10","m3":"0","sec3":"Abdelrahman Mohamed401119343000","h4":"5","m4":"0","sec4":"A401119343000","h5":"5","m5":"0","sec5":"A401119343000" ,"h6":"5","m6":"0","sec6":"A401119343000","h7":"5","m7":"0","sec7":"A401119343000"," h8":"5","m8":"0","sec8":"A401119343000","h9":"18","m9":"0","sec9":"Abdelrahman Mohamed401119343000","h10":"0","m10":"0","sec10":"set sec"]

这是我的 C# 代码:

字符串 qry = "de=e1&id=1";

WebRequest request =WebRequest.Create("php链接"+qry);

WebResponse 响应 = request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.ASCII);

string jsonData = reader.ReadToEnd();

jsonData = jsonData.Replace("", "[").Replace("","]");

MessageBox.Show(jsonData);

List<JsonData>result = JsonConvert.DeserializeObject<List<JsonData>>(jsonData);

metroGrid1.DataSource = 结果;

【问题讨论】:

【参考方案1】:

您需要在 Json 字符串中对 JsonData 类型的对象进行反序列化。因此,您的 JSON 字符串应类似于 ["ABC":"PQR", ...]

【讨论】:

以上是关于C# Json 反序列化异常(“将值“id”转换为类型“Eng_Tab.JsonData”时出错。路径“[0]”,第 1 行,位置 5。”)的主要内容,如果未能解决你的问题,请参考以下文章

将值“utf-8”转换为类型“System.Text.Encoding”时出错

c# 多个json字符串反序列化

当我尝试从 c# 中的 url 反序列化时出错

C# JSON 将文件反序列化为对象列表失败,并将字符串转换为集合错误

Json反序列化器或正则表达式或Json解析以在c#中转换Json字符串

将 JSON 对象脱盐到数据表时将值“1D”转换为类型“System.Int64”时出错