将JsonValue转换为域对象

时间:2018-06-12 23:39:45

标签: c# .net json.net

我有一个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编辑菜单中的Paste Special)。

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

JsonValue 转换为域对象(Labresult)的最佳方法是什么?

2 个答案:

答案 0 :(得分:15)

使用Json.Net

也可以更简单

JsonConvert.DeserializeObject<T> Method (String)

SELECT * FROM (`leadactivity`)
WHERE statusdate between '$thedate 00:00:00' and '$thedate 23:59:59'
ORDER BY id DESC LIMIT 25

从那里你应该能够提取所需的域值。

就这么简单,你可以创建一个扩展

//...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的实例

答案 1 :(得分:1)

我相信使用Json.NET

从string / System.Json.JsonValue转换为DotNet Object的最佳方法

您需要的只是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

Json.Net还允许您使用json对象而无需声明类。 https://dotnetfiddle.net/ZIA8BV