[英]Error in Converting JSON to a C# Class Model
我正在尝试将 JSON 字符串转换为 class model 但总是出错。 我检查了所有名称和数据类型是否匹配,但仍然出现错误。 我的代码:
//方法model
Public Class ClassModel
Public No As String
Public Amt As Integer
End Class
//这是 .net 标准(2.0) class 库(vb.net),在 c# 项目中引用并生成结果
Public Class NumberEntry
Public Function Result(ClassModel As ClassModel)
Dim DsResult As New DataSet
Dim DtStatus As New DataTable
Try
DtStatus.Columns.Add("StatusCode")
DtStatus.Columns.Add("Message")
Dim row As DataRow = DtStatus.NewRow
DtStatus.Rows.Add(row)
Dim dt As New DataTable
dt.Columns.Add("Number", System.Type.GetType("System.String"))
dt.Columns.Add("Amount", System.Type.GetType("System.Int32"))
dt.Columns.Add("ID", System.Type.GetType("System.String"))
Dim NewAmt As Integer
NewAmt = RoundOff(AndarBaharModel.Amt)
For i As Integer = 0 To 10 - 1
Dim NewNo = AndarBaharModel.No & i
dt.Rows.Add(NewNo, NewAmt / 10, "A")
If dt.Rows(i).Item(0).ToString = "00" Then
dt.Rows(i).Item(0) = "100"
End If
Next
Dim dv As New DataView(dt)
dv.Sort = "Number asc"
Dim FinalDt As DataTable = dv.ToTable()
DsResult.Tables.Add(FinalDt)
DsResult.Tables.Add(DtStatus)
DtStatus.Rows(0).Item("StatusCode") = 1
DtStatus.Rows(0).Item("Message") = "No Has Been Successfully Saved"
Catch ex As Exception
DtStatus.Rows(0).Item("StatusCode") = 0
DtStatus.Rows(0).Item("Message") = ex.Message.ToString()
DsResult.Tables.Add(DtStatus)
Return DsResult
Finally
If DsResult.Tables.Count = 1 Then
DsResult.Tables(0).TableName = "NumberStatus"
Else
DsResult.Tables(0).TableName = "NumberResult"
DsResult.Tables(1).TableName = "NumberStatus"
End If
End Try
Return DsResult
End Function
结束子
// 这是 c# 项目,其中使用了上述 class 库
// class model
public class NumberResultModel
{
public List<NumberResult> NumberResult { get; set; }
public List<NumberStatus> NumberStatus { get; set; }
}
public class NumberResult
{
public string Number { get; set; }
public string Amount { get; set; }
public string ID { get; set; }
}
public class NumberStatus
{
public string StatusCode { get; set; }
public string Message { get; set; }
}
//将 JSON 转换为 class
var ClassResult = new R1Soft_PCL.NumberEntry();
var model = new ClassModel();
model.No = "1";
model.Amt = "50";
var result = ClassResult.Result(model);
var Jason= JsonConvert.SerializeObject(result);
var JasonString= "{"NumberResult":[
{"Number":"10","Amount":20,"ID":"A"},
{"Number":"11","Amount":20,"ID":"A"},
{"Number":"12","Amount":20,"ID":"A"},
{"Number":"13","Amount":20,"ID":"A"},
{"Number":"14","Amount":20,"ID":"A"},
{"Number":"15","Amount":20,"ID":"A"},
{"Number":"16","Amount":20,"ID":"A"},
{"Number":"17","Amount":20,"ID":"A"},
{"Number":"18","Amount":20,"ID":"A"},
{"Number":"19","Amount":20,"ID":"A"}],
"NumberStatus":[
{"StatusCode":"1","Message":"Andar No Has Been Successfully Saved"}]}""
var jsonResponse = JsonConvert.DeserializeObject<List<NumberResultModel>>(Jason);
//得到这个低于错误 -
One or more errors occurred. (Cannot deserialize the current JSON object (e.g. {"name":"value"})
into type 'System.Collections.Generic.List`1[R1Soft_App.Models.NumberResultModel]'
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized
type so that it is a normal .NET type
(e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can
be deserialized from a JSON object.
JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'NumberResult', line 1, position 16.)
显然,您正在尝试将json object反序列化为json 数组
这是什么意思?
这个{"KEY":"VALUE"}
是json object 。 但是, [{"KEY":"VALUE"}]
是一个json 数组,因为它被[]
包围
如果您尝试在 object 以下反序列化
var JasonString= "{"NumberResult":[
{"Number":"10","Amount":20,"ID":"A"},
{"Number":"11","Amount":20,"ID":"A"},
{"Number":"12","Amount":20,"ID":"A"},
{"Number":"13","Amount":20,"ID":"A"},
{"Number":"14","Amount":20,"ID":"A"},
{"Number":"15","Amount":20,"ID":"A"},
{"Number":"16","Amount":20,"ID":"A"},
{"Number":"17","Amount":20,"ID":"A"},
{"Number":"18","Amount":20,"ID":"A"},
{"Number":"19","Amount":20,"ID":"A"}],
"NumberStatus":[
{"StatusCode":"1","Message":"Andar No Has Been Successfully Saved"}]}""
所以你需要改变
var jsonResponse = JsonConvert.DeserializeObject<List<NumberResultModel>>(Jason);
至
var jsonResponse = JsonConvert.DeserializeObject<NumberResultModel>(Jason);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.