EDIT # 2:
Я добавил примечание ниже об использовании отличной Json.NET библиотеки для десериализации в dynamic
объекта.
EDIT # 1:
Благодаря Hoghweed's answer, мой ответ ниже теперь более полно. В частности, мы должны гипсаHttpContent
мы получаем от HttpResponseMessage.Content
к ExpandoObject
для того, чтобы dynamic
-ness работать, как ожидалось:
dynamic content = response.Content.ReadAsAsync<ExpandoObject>().Result;
var myPropertyValue = content.MyProperty;
Чтобы получить метод ReadAsync<T>()
расширения, хотя, вы должны были бы использовать NuGet загрузить и установить System.Net.Http.Formatting.dll
из пакета Microsoft.AspNet.WebApi.Client
(here's the "old" Nuget page, в котором упоминается, что он теперь включен в вышеуказанный пакет).
Оригинал Ответ:
Таким образом, вы не хотите, чтобы создать 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's ElasticObject
, которые могли бы быть очень полезным при преобразовании между 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.
Надеюсь, это поможет.
Вы должны переформулировать свои вопросы: как сейчас, ответы ** Да ** и ** Да **. Но я думаю, это не поможет вам так много. – Andreas
Вы можете попробовать присвоить содержимое, которое вы вернетесь, в переменную [dynamic] (http://msdn.microsoft.com/en-us/library/dd264741.aspx) и получить доступ к свойствам/значениям, которые есть, но, d знать заранее, что имена свойств –
, конечно, я уже знаю структуру данных. Я просто не хочу строить над ним модель. – Saturnix