JSon.NET DeserializeObject> не возвращает список и не выдает ошибку
Я застрял с Json.NET библиотека и ее метод DeserializeObject. Документация не совсем ясна с тем, что может здесь происходить, поэтому я был бы признателен, если бы кто-нибудь мог объяснить, как добиться десериализации JSON в список пользовательских объектов.
Я пытаюсь десериализовать этот JSON
[
{"userid":"0",
"listid":1,
"lastname":"Mann",
"inplace":true,
"xpos":428,
"ypos":111
},
{"userid":"1",
"listid":1,
"lastname":"Parker",
"inplace":true,
"xpos":334,
"ypos":154
},
{"userid":"2",
"listid":1,
"lastname":"Terry",
"inplace":true,
"xpos":513,
"ypos":160
}
]
в объект пользователя
[JsonObject(MemberSerialization.OptIn)]
public class User
{
[JsonProperty(PropertyName = "userid")]
public string userid { get; set; }
[JsonProperty(PropertyName = "listid")]
public int listid { get; set; }
[JsonProperty(PropertyName = "lastname")]
public string lastname { get; set; }
[JsonProperty(PropertyName = "inplace")]
public bool inplace { get; set; }
[JsonProperty(PropertyName = "xpos")]
public int xpos { get; set; }
[JsonProperty(PropertyName = "ypos")]
public int ypos { get; set; }
public User()
{
}
}
используя
List<User> users = JsonConvert.DeserializeObject<List<User>>(jsonUsers);
без успеха. Не получая никаких ошибок, ни пользователей. JsonConvert.DeserializeObject просто умирает молча.
Я попытался создать макет и сделать SerializeObject и DeserializeObject с этой строкой JSON, но с тем же результатом, без ошибок, без результатов.
Я даже пытаюсь пройти serializersettings для того, чтобы увидеть, что не так, но и без ошибок
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Error += delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args) {
errorList.Add(args.ErrorContext.Error.Message);
};
List<User> users = JsonConvert.DeserializeObject<List<User>>(jsonUsers, settings);
когда я пытаюсь увидеть, что происходит во время десериализации, я замечаю, что контекст не инициализируется?!
public class User
{
...
[OnDeserializing]
internal void OnDeserializing(StreamingContext context) {
}
}
что я делаю неправильно здесь? И как я могу десериализовать это в список пользователей?
4 ответов
Я нашел, что было проблемой. JSon.NET десериализовал мои целые числа от JSON до Int64 вместо Int32, поэтому вместо int я поставил long, и все работало так, как должно было в первую очередь.
есть ли способ указать, что я хочу, что свойства десериализовать в int?
к этому времени вы могли бы решить проблемы, но если кто-нибудь наткнется на это, может помочь.
Я использую Json.net библиотека для де-сериализации пользовательских сложных иерархических объектов. У меня есть несколько преобразователей для преобразования объектов Json в C#.
вы можете использовать JsonConvertAttributes для приведения возвращаемых типов для свойств.
[JsonConverter(typeof(Int32))]
public int xpos { get; set; }
Если вы хотите вернуть пользовательский объект де-сериализации, вы можете написать свои собственные конвертеры и Json.net будет cast / convert де-сериализованный объект с помощью этого пользовательского преобразователя.
Zalke Санджай
У меня такая же проблема, потому что у меня нет конструктора по умолчанию (конструктор с пустыми параметрами) в моем классе
мне не повезло со списком T, никакой ошибки, но только нулевые результаты:
List<SomeClass> obj = JsonConvert.DeserializeObject<List<SomeClass>>(jsonstring);
public class SomeClass
{
public string SomeProp {get;set;}
(...)
}
для меня следующим было решение. Я могу только догадываться об объяснении, поэтому я думаю, что вам лучше всего использовать только код:
SomeClassList obj = JsonConvert.DeserializeObject<SomeClassList>(jsonstring);
public class SomeClass
{
public string SomeProp {get;set;}
(...)
}
public class SomeClassList
{
public List<SomeClass> SomeClass {get;set;}
}
надеюсь, что это помогает. (Если нет, удачи в сортировке всего этого проклятого JSON" null setting " во время поиска -.-)