【问题标题】:RestSharp deserialization with 2 arrays使用 2 个数组的 RestSharp 反序列化
【发布时间】:2020-11-04 11:42:31
【问题描述】:

我有一个 json 响应,我试图用 RestSharp 反序列化 看起来是这样的

[{"cname":"APPLICANT NAME","dob":"01-01-1997","gender":"2","msg":"Ok","msgcode":"0"},
{"results":
[{"subjectcode":"214","subject":"SOCIAL STUDIES","grade":"C5"},
{"subjectcode":"302","subject":"ENGLISH LANG","grade":"C5"},
{"subjectcode":"402","subject":"MATHEMATICS(CORE)","grade":"E8"},
{"subjectcode":"517","subject":"INTEGRATED SCIENCE","grade":"D7"},
{"subjectcode":"203","subject":"ECONOMICS","grade":"D7"},
{"subjectcode":"204","subject":"GEOGRAPHY","grade":"B3"},
{"subjectcode":"205","subject":"GOVERNMENT","grade":"C6"},
{"subjectcode":"207","subject":"HISTORY","grade":"B3"}]
}]

我创建了这些类来帮助我进行序列化

public class Result
{
    public string subjectcode { get; set; }
    public string subject { get; set; }
    public string grade { get; set; }
}

public class StudentDetail
{
    public string cname { get; set; }
    public string dob { get; set; }
    public string gender { get; set; }
    public string msg { get; set; }
    public string msgcode { get; set; }
    public List<Result> results { get; set; }
}

public class VerifyData
{
    public List<StudentDetail> StudentDetails { get; set; }
}

但是,每当我尝试使用 RestSharp 反序列化时

IRestResponse response = client.Execute<VerifyData>(request);

我收到以下错误消息:

{"无法将 'RestSharp.JsonArray' 类型的对象转换为类型 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'。"}

任何指针,已经搜索了类似的问题,但无法解决这个问题。 谢谢

Json 数据现在是

[{"cname":"APPLICANT NAME","dob":"01-01-1997","gender":"2","msg":"Ok","msgcode":"0",
"results":
[{"subjectcode":"214","subject":"SOCIAL STUDIES","grade":"C5"},
{"subjectcode":"302","subject":"ENGLISH LANG","grade":"C5"},
{"subjectcode":"402","subject":"MATHEMATICS(CORE)","grade":"E8"},
{"subjectcode":"517","subject":"INTEGRATED SCIENCE","grade":"D7"},
{"subjectcode":"203","subject":"ECONOMICS","grade":"D7"},
{"subjectcode":"204","subject":"GEOGRAPHY","grade":"B3"},
{"subjectcode":"205","subject":"GOVERNMENT","grade":"C6"},
{"subjectcode":"207","subject":"HISTORY","grade":"B3"}]
}]

【问题讨论】:

    标签: c# restsharp


    【解决方案1】:

    您不需要额外的课程VerifyData。您需要的是以下内容:

    var studentDetails = client.Execute<StudentDetail>(request).Data;
    

    或分两步:

    var response = client.Execute<StudentDetail>(request);
    var studentDetails = response.Data;
    

    更新

    如果您定义了以下类,则使用 JsonConvert (Json.NET):

    public class Result
    {
        [JsonProperty("subjectcode")]
        public string Subjectcode { get; set; }
    
        [JsonProperty("subject")]
        public string Subject { get; set; }
    
        [JsonProperty("grade")]
        public string Grade { get; set; }
    }
    
    public class StudentDetail
    {
        [JsonProperty("cname")]
        public string Cname { get; set; }
    
        [JsonProperty("dob")]
        public string Dob { get; set; }
    
        [JsonProperty("gender")]
        public string Gender { get; set; }
    
        [JsonProperty("msg")]
        public string Msg { get; set; }
    
        [JsonProperty("msgcode")]
        public string Msgcode { get; set; }
    
        [JsonProperty("results")]
        public IList<Result> Results { get; set; }
    }
    

    您可以尝试以下方法:

    JsonConvert.Deserialize<StudentDetail>(json)
    

    【讨论】:

    • 感谢您的建议,刚刚尝试了您的建议,结果返回 null
    • @Tonto 欢迎您。你为你的客户添加了这个client.AddHandler("application/json", () =&gt; new RestSharp.Serializers.Newtonsoft.Json.NewtonsoftJsonSerializer()); 吗?这应该在我们调用Execute 方法之前完成。
    • 感谢您的宝贵时间。我无法毫无错误地添加您建议的行。我也在玩JsonConvert.Deserialize,这似乎给出了一些结果。如果我这样做 JsonConvert.Deserialize&lt;StudentDetail&gt;(json) 它会给我一个错误。但是如果我这样做 JsonConvert.Deserialize&lt;List&lt;StudentDetail&gt;(json) 序列化完成但返回 2 个项目而不是 1 个
    • 好的,这个JsonConvert.Deserialize&lt;List&lt;StudentDetail&gt;&gt;(json) 现在给了我正确的数据。 json 之前没有正确形成,所以我们不得不与 API 设计人员讨论它。现在我得到了这个有效的JsonConvert.DeserializeObject&lt;List&lt;StudentDetail&gt;&gt;(jsonContent)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多