У меня есть классы, которые выглядят так, на основе JSON, возвращаемой апите слабину в:десериализации обобщенно типизированные классов с Newtonsoft
public class Response<T>
{
public bool ok { get; set; }
public string error { get; set; }
}
public class PostMessage : Response<PostMessage>
{
public string ts { get; set; }
public string channel { get; set; }
public Message message { get; set; }
}
public class ChannelsHistory : Response<ChannelsHistory>
{
public string latest { get; set; }
public List<Message> messages { get; set; }
public bool has_more { get; set; }
}
И я хочу, чтобы написать один метод, который может узкое место вызова JsonConvert.DeserializeObject<T>
. Я не слишком много знаю о деталях реализации за этим методом, но я думал, что это будет работать:
internal static Response<T> GetSlackResponse<T>(List<KeyValuePair<string, string>> parameters = null)
{
Uri slackUri = BuidSlackUri(typeof(T), parameters);
String jsonResponse = GetJson(slackUri);
Response<T> response = JsonConvert.DeserializeObject<Response<T>>(jsonResponse);
if (!response.ok)
{
Aesthetic.Catch("The Slack API failed to respond successfully. " + response.error);
}
return response;
}
Ничто не удается, но не все свойства, мне нужно в настоящее время десериализации. Например, вызов GetSlackResponse() вернет ответ, который имеет значение ok, равное true, но у меня не будет доступа к свойству Message класса PostMessage. Я пробовал кастинг (как явно, так и с as
), безрезультатно.
Я уверен, что мне не хватает чего-то простого здесь, может кто-нибудь указать на это?
can pls совместно используют код сообщения класс –
общественный класс Сообщение { public string type {get; задавать; } public string ts {get; задавать; } public string user {get; задавать; } открытый текст строки {get; задавать; } общественный bool? is_starred {get; задавать; } общественный bool? wibblr {get; задавать; } канал общедоступной строки {get; задавать; } [JsonConstructor] общественного сообщения() {} общественное Сообщение (RtmEvent rtmObj) { типа = rtmObj.type; ts = rtmObj.ts; user = rtmObj.user; text = rtmObj.text; channel = rtmObj.channel; } } – Matt
Некоторые из этих свойств являются ключевыми словами. Попробуйте добавить атрибуты сериализации как не ключевые слова или изменить имена свойств. –