В ответ от API Bitbucket REST я получаю следующий объект JSON (упрощенный вариант):Частичное десериализации объекта JSON с помощью DataContractJsonSerializer
{
"repositories": [
{
"scm": "hg",
"has_wiki": false,
"language": "c#",
"slug": "Repo1"
},
{
"scm": "hg",
"has_wiki": false,
"language": "java",
"slug": "Repo2"
},
{
"scm": "hg",
"has_wiki": true,
"language": "c#",
"slug": "Repo3"
}
],
"user": {
"username": "someuser",
"first_name": "Some",
"last_name": "User",
"display_name": "Some User",
"is_team": false,
"avatar": "https://someuseravatar.com",
"resource_uri": "/1.0/users/someuser"
}
}
Единственная часть из этого объекта JSON мне нужно быть десериализованная часть user
. За этими целями я создал следующий класс:
[DataContract(Name="user")]
public class BitbucketUser
{
[DataMember(Name = "username")]
public string Username { get; set; }
[DataMember(Name = "first_name")]
public string FirstName { get; set; }
[DataMember(Name = "last_name")]
public string LastName { get; set; }
[DataMember(Name = "display_name")]
public string DisplayName { get; set; }
[DataMember(Name = "is_team")]
public bool IsTeam { get; set; }
[DataMember(Name = "avatar")]
public string Avatar { get; set; }
[DataMember(Name = "resource_uri")]
public string ResourceUri { get; set; }
}
And вспомогательного метод для десериализации JSON:
public static T Deserialize<T>(string json)
{
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
T result = (T)deserializer.ReadObject(stream);
return result;
}
}
Поэтому, когда я пытаюсь десериализацией User
объекта используя следующий код:
User user = JsonHelper.Deserialize<User>(jsonResponse);
Тогда я получаю user
объект, содержащий все свойства, как null
. Я попытался найти правильные атрибуты для использования в заголовке класса, но результат такой же. А также я не использую библиотеку Json.NET, чтобы избежать дополнительной ссылки на библиотеку, а также я не создаю класс-оболочку для хранения этого объекта-пользователя как свойства User
типа и объекта репозитория как массив типа Repositories [] , Есть ли решение этой проблемы для получения десериализованного пользовательского объекта без нулевых полей?
«Я не использую библиотеку Json.NET только чтобы избежать дополнительных ссылок библиотека» Это библиотека ссылки действительно что-то избежать? Даже Microsoft теперь распространяет некоторые свои библиотеки через NuGet. – svick
http://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm вот как это сделать с помощью newtonsoft.json (получил этот вопрос как первый в google, поэтому он может быть полезен другим) – pajics