繁体   English   中英

将 JSON 转换为 C# Class ZA559B87068921EEC05086CE5485E978Z 时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM