编辑#2:
我在下面添加了一条关于使用出色的Json.NET库反序列化为dynamic
对象的注释。
编辑#1:
感谢Hoghweed 的回答,我下面的回答现在更完整了。具体来说,我们需要将HttpContent
我们得到的转换HttpResponseMessage.Content
为ExpandoObject
以使dynamic
-ness 按预期工作:
dynamic content = response.Content.ReadAsAsync<ExpandoObject>().Result;
var myPropertyValue = content.MyProperty;
但是,要获得ReadAsync<T>()
扩展方法,您需要使用NuGetSystem.Net.Http.Formatting.dll
从Microsoft.AspNet.WebApi.Client
包中下载和安装(这里是“旧”Nuget 页面,其中提到它现在包含在上述包中)。
原答案:
因此,您不希望创建POCO并且必须在返回的 XML/JSON 结构发生变化时管理其属性。dynamic
似乎非常适合您的用例:
HttpResponseMessage response = await client.PostAsync(
"http://www.someAPI.com/api.xml", requestContent);
response.EnsureSuccessStatusCode();
dynamic content = response.Content.ReadAsAsync<ExpandoObject>().Result; // Notice the use of the dynamic keyword
var myPropertyValue = content.MyProperty; // Compiles just fine, retrieves the value of this at runtime (as long as it exists, of course)
特别是关于 XML:您可以尝试Anoop Madhusudanan'sElasticObject
dynamic
,这在和之间进行转换时可能非常有用XML
,并且返回。
特别是关于 JSON:您可以使用 Json.NET执行以下操作:
dynamic content = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
var myPropertyValue = content.MyProperty;
好处是您不会依赖Microsoft.AspNet.WebApi.Client
包(从 开始,它v4.0.30506.0
依赖于 Json.NET)。缺点是您不能将它用于 XML。
希望这可以帮助。