繁体   English   中英

动态解析json消息到poco对象

[英]dynamically parse json message to poco object

我有这种方法来解析JSON响应消息到特定的poco对象。

是否可以通过在运行时添加类类型并将此方法用于多个类的方式进行更改。

private static async Task<TestClass> ParseResponseMessageToObject(HttpResponseMessage responseMessage)
{
    if (!responseMessage.IsSuccessStatusCode) { return null; }

    using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
    {
        return (TestClass)JsonConvert.DeserializeObject(new StreamReader(responseStream).ReadToEnd(), typeof(TestClass));
    }
}

我想你想要这样的东西

private static async Task<T> ParseResponseMessageToObject<T>(HttpResponseMessage responseMessage)
{
    if (!responseMessage.IsSuccessStatusCode) { return default(T); }

    using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
    {
        return JsonConvert.DeserializeObject<T>(new StreamReader(responseStream).ReadToEnd());
    }
}

如果在编译时不知道使用的类型,则可以使用动态

dynamic dynObj = JsonConvert.DeserializeObject(jsonstring);
int i = dynObj.SomeIntProperty

由于JObject实现IDictionary,因此您也可以将其用作

var  dynObj = JObject.Parse(jsonstring);
int i = (int)dynObj["SomeIntProperty"];

您应该将方法更改为更通用

private static async Task<T> ParseResponseMessageToObject<T>(HttpResponseMessage responseMessage) where T : class, new()
    {
        if (!responseMessage.IsSuccessStatusCode) { return null; }

        using (Stream responseStream = await responseMessage.Content.ReadAsStreamAsync())
        {
            return (T)JsonConvert.DeserializeObject(new StreamReader(responseStream).ReadToEnd(), typeof(T));
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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