Использую RestSharp для отправки запроса на API Yandex, но почему-то переменная result не заполняется.
В переменной response четко виден JSON.
public Result GetLangByString(string str)
{
var request = new RestRequest("/api/v1.5/tr.json/detect", Method.POST);
request.Credentials = CredentialCache.DefaultCredentials;
request.AddParameter("key", _key);
request.AddParameter("text", str);
IRestResponse response = _restClient.Execute(request);
RestSharp.Deserializers.JsonDeserializer deserializer = new RestSharp.Deserializers.JsonDeserializer();
var result = deserializer.Deserialize<Result>(response);
return result;
}
public class Result
{
public int code;
public string lang;
}
Если поля заменить на свойства, то все работает. Это какие-то особенности либы или так принято?
Конечно поля в данном случае будут игнорироваться при десериализации результата. Зависит это от конкретной имплементации метода десериализации. В библиотеке RestSharp этот метод выглядит так:
private void Map(object target, IDictionary<string, object> data)
{
var objType = target.GetType();
var props = objType.GetProperties().Where(p => p.CanWrite).ToList();
foreach (var prop in props)
{
var type = prop.PropertyType;
var name = prop.Name;
var actualName = name.GetNameVariants(Culture).FirstOrDefault(n => data.ContainsKey(n));
var value = actualName != null ? data[actualName] : null;
if (value == null) continue;
// check for nullable and extract underlying type
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
type = type.GetGenericArguments()[0];
}
prop.SetValue(target, ConvertValue(type, value), null);
}
}
Как видно из приведенного выше кода, метод получает с помощью рефлексии нужные свойства сконструированного объекта target
типа T
(в вашем случае это будет класс Result
) и заполняет их нужными значениями из словаря.
Все верно! Никаких глюков нет! Вы можете менять лишь свойства! А поля это просто переменные, которые не ассоциируются как объекты класса и не обладают таким важным свойством как "ПРИВЯЗКА ДАННЫХ". Вот у вас ничего и не получается с "ПОЛЯМИ"...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем доброго времени суток! Крик души! Осталось реализовать две фичи, но бьюсь над ними уже пару дней
Есть коллекция ссылок и нужно скачать файлы по данным ссылкам
Встречали ли вы кастомный компонент "трекбар" с несколькими ползунками, каждый из которых задает некий рендж значений?