Bitbucket REST API からの応答として、次の JSON オブジェクト (簡略化されたバージョン) を取得しています。
{
"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; }
}
そして、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[] タイプの配列として保持するラッパー クラスを作成していません。この問題を解決して、null フィールドを持たない逆シリアル化されたユーザー オブジェクトを取得する方法はありますか?