代码之家  ›  专栏  ›  技术社区  ›  LCJ

将jsonValue转换为域对象

  •  4
  • LCJ  · 技术社区  · 6 年前

    我有一个API调用,如下所示:

    JsonValue result = api.GET("/chart/" + problemList.PatientMRN.ToString() + "/problems", problemInfo);
    string resultString = result.ToString();
    

    注:我指的是System.json.jsonValue

    替代方法(使用javascriptserializer)

    Rootobject_Labresult objGResponse = new JavaScriptSerializer().Deserialize<Rootobject_Labresult>(resultString);
    

    从JSON中的字符串,我创建了相应的类(使用Visual Studio编辑菜单中的“特殊粘贴”)。

    public class Rootobject_Labresult
    {
        public Labresult[] labresults { get; set; }
        public int totalcount { get; set; }
    }
    
    public class Labresult
    {
        public string createddate { get; set; }
        public DateTime createddatetime { get; set; }
        public string departmentid { get; set; }
        public string description { get; set; }
    }
    

    但当我创建一个数组时,我得到了以下错误。

    Labresult[] labresults = result[0];  
    ////Error: cannot implicitly convert type System.Json.JsonValue to Labresult
    

    最好的转换方法是什么 json值 到域对象(labresult)?

    2 回复  |  直到 6 年前
        1
  •  1
  •   teamchong    6 年前

    我相信最好的方法是使用 Json.NET

    您所需要的只是newtonsoft.json.linq名称空间,您可以用一行代码进行所有的对话。

    using Newtonsoft.Json.Linq;
    
    var result = JToken.Parse(jsonVal.ToString()).ToObject<Rootobject_Labresult>();
    

    我在这里创建了一个示例。 https://dotnetfiddle.net/N2VfKl

    下面是另一个使用json.net进行对象对话的示例 https://dotnetfiddle.net/rAkx7m

    NET还允许您在不声明类的情况下使用JSON对象。 https://dotnetfiddle.net/ZIA8BV

        2
  •  15
  •   Nkosi    6 年前

    使用json.net也可以更简单地做到这一点。

    JsonConvert.DeserializeObject<T> Method (String)

    //...code removed for brevity
    string json = result.ToString();
    Rootobject_Labresult rootObject = JsonConvert.DeserializeObject<Rootobject_Labresult>(json);
    Labresult[] labresults = rootObject.labresults;
    

    您应该能够从中提取所需的域值。

    简单地说,你可以创建一个扩展

    public static class JsonValueExtensions {
        public static T ToObject<T>(this JsonValue value) {
            return JsonConvert.DeserializeObject<T>(value.ToString());
        }
    }
    

    从而进一步减少了原始代码

    //...code removed for brevity
    Rootobject_Labresult rootObject = result.ToObject<Rootobject_Labresult>();
    Labresult[] labresults = rootObject.labresults;
    

    假设是 result 在上面的代码段中,示例是 JsonValue