Newtonsoft.Json.JsonSerializationException:C#
Newtonsoft.Json.JsonSerializationException: C#
美好的一天!
我在反序列化 JSON 字符串时遇到问题
这是我的函数:
public static void Deserialised()
{
string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
"\"responseText\":\"Approved\"," +
"\"status\":\"A\"," +
"\"txnDate\":\"20220321\"," +
"\"txnId\":\"000067\"," +
"\"txnTime\":\"1049\"," +
"\"txnType\":\"sale\"," +
"\"amt\":\"109\"}," +
"\"dataType\":\"trans\"}";
Root myDeserializedJson = JsonConvert.DeserializeObject<Root>(jsonString); //Error popup here!
foreach (var datas in myDeserializedJson.data)
{
Console.WriteLine(datas.merchantRefNo);
}
}
这是我的模特:
public class Data
{
public string merchantRefNo { get; set; }
public string responseText { get; set; }
public string status { get; set; }
public string txnDate { get; set; }
public string txnId { get; set; }
public string txnTime { get; set; }
public string txnType { get; set; }
public string amt { get; set; }
}
public class Root
{
public List<Data> data { get; set; }
public string dataType { get; set; }
}
错误:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[fortestings.Program+Data]',因为该类型需要一个 JSON 数组(例如 [1,2,3])以正确反序列化。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是原始类型像整数,而不是像数组或列表这样的集合类型),可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。
路径 'data.merchantRefNo',第 1 行,位置 25。'
{
“数据”:{
"merchantRefNo":"foo",
"responseText":"已批准",
“状态”:“A”,
"txnDate":"20220321",
"txnId":"000067",
"交易时间":"1049",
"txnType":"销售",
“金额”:“109”
},
“数据类型”:“反式”
}
这是您的根对象 JSON 但您 class 需要一个数据列表
public class Root
{
public **List<Data>** data { get; set; }
public string dataType { get; set; }
}
所以反序列化 json 与您的模型不匹配。
您的 Json 应该如下所示
{
“数据”:[{
"merchantRefNo":"foo",
"responseText":"已批准",
“状态”:“A”,
"txnDate":"20220321",
"txnId":"000067",
"交易时间":"1049",
"txnType":"销售",
“金额”:“109”
}],
“数据类型”:“反式”
}
在您的 Root
class 中,将 List<Data> data
更改为 Data data
然后您可以根据需要 de-serialize 您的 JSON
字符串你的 Root
class:
using System;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
"\"responseText\":\"Approved\"," +
"\"status\":\"A\"," +
"\"txnDate\":\"20220321\"," +
"\"txnId\":\"000067\"," +
"\"txnTime\":\"1049\"," +
"\"txnType\":\"sale\"," +
"\"amt\":\"109\"}," +
"\"dataType\":\"trans\"}";
var result =JsonConvert.DeserializeObject<Root>(jsonString);
Console.WriteLine(result.dataType);
Console.WriteLine(result.data.merchantRefNo);
Console.WriteLine(result.data.status);
Console.WriteLine(result.data.txnId);
}
}
public class Data
{
public string merchantRefNo { get; set; }
public string responseText { get; set; }
public string status { get; set; }
public string txnDate { get; set; }
public string txnId { get; set; }
public string txnTime { get; set; }
public string txnType { get; set; }
public string amt { get; set; }
}
public class Root
{
public Data data { get; set; }
public string dataType { get; set; }
}
输出:
trans
foo
A
000067
您可以在这里找到一个工作示例:https://dotnetfiddle.net/8Nsl9m
美好的一天!
我在反序列化 JSON 字符串时遇到问题
这是我的函数:
public static void Deserialised()
{
string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
"\"responseText\":\"Approved\"," +
"\"status\":\"A\"," +
"\"txnDate\":\"20220321\"," +
"\"txnId\":\"000067\"," +
"\"txnTime\":\"1049\"," +
"\"txnType\":\"sale\"," +
"\"amt\":\"109\"}," +
"\"dataType\":\"trans\"}";
Root myDeserializedJson = JsonConvert.DeserializeObject<Root>(jsonString); //Error popup here!
foreach (var datas in myDeserializedJson.data)
{
Console.WriteLine(datas.merchantRefNo);
}
}
这是我的模特:
public class Data
{
public string merchantRefNo { get; set; }
public string responseText { get; set; }
public string status { get; set; }
public string txnDate { get; set; }
public string txnId { get; set; }
public string txnTime { get; set; }
public string txnType { get; set; }
public string amt { get; set; }
}
public class Root
{
public List<Data> data { get; set; }
public string dataType { get; set; }
}
错误:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[fortestings.Program+Data]',因为该类型需要一个 JSON 数组(例如 [1,2,3])以正确反序列化。 要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是原始类型像整数,而不是像数组或列表这样的集合类型),可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型以强制它从 JSON 对象反序列化。 路径 'data.merchantRefNo',第 1 行,位置 25。'
{ “数据”:{ "merchantRefNo":"foo", "responseText":"已批准", “状态”:“A”, "txnDate":"20220321", "txnId":"000067", "交易时间":"1049", "txnType":"销售", “金额”:“109” }, “数据类型”:“反式” }
这是您的根对象 JSON 但您 class 需要一个数据列表
public class Root
{
public **List<Data>** data { get; set; }
public string dataType { get; set; }
}
所以反序列化 json 与您的模型不匹配。 您的 Json 应该如下所示 { “数据”:[{ "merchantRefNo":"foo", "responseText":"已批准", “状态”:“A”, "txnDate":"20220321", "txnId":"000067", "交易时间":"1049", "txnType":"销售", “金额”:“109” }], “数据类型”:“反式” }
在您的 Root
class 中,将 List<Data> data
更改为 Data data
然后您可以根据需要 de-serialize 您的 JSON
字符串你的 Root
class:
using System;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
string jsonString = "{\"data\":{\"merchantRefNo\":\"foo\"," +
"\"responseText\":\"Approved\"," +
"\"status\":\"A\"," +
"\"txnDate\":\"20220321\"," +
"\"txnId\":\"000067\"," +
"\"txnTime\":\"1049\"," +
"\"txnType\":\"sale\"," +
"\"amt\":\"109\"}," +
"\"dataType\":\"trans\"}";
var result =JsonConvert.DeserializeObject<Root>(jsonString);
Console.WriteLine(result.dataType);
Console.WriteLine(result.data.merchantRefNo);
Console.WriteLine(result.data.status);
Console.WriteLine(result.data.txnId);
}
}
public class Data
{
public string merchantRefNo { get; set; }
public string responseText { get; set; }
public string status { get; set; }
public string txnDate { get; set; }
public string txnId { get; set; }
public string txnTime { get; set; }
public string txnType { get; set; }
public string amt { get; set; }
}
public class Root
{
public Data data { get; set; }
public string dataType { get; set; }
}
输出:
trans
foo
A
000067
您可以在这里找到一个工作示例:https://dotnetfiddle.net/8Nsl9m