2016-10-18 13 views
0

私はこのJSON文字列をNewtonsoft.Jsonライブラリを使用して逆シリアル化しようとしています。しかし、返された非直列化オブジェクトは常にnullを返します。私はそれがプレーヤーオブジェクト内のアドレスオブジェクトに関連していると思います。別のオブジェクトを含むJSONオブジェクトを逆シリアル化する

これは、これらはRootObject、プレーヤーとアドレスクラスでJSON文字列

{ 
    "player":{ 
     "id":"ed704e61-f92b-4505-b087-8a47ca4d1eaf", 
     "firstName":"Jack", 
     "lastName":"Russel", 
     "nickname":"Barky", 
     "dateOfBirth":"1995-08-16T00:00:00", 
     "sex":"m", 
     "address":{ 
     "street":"Elmstreet", 
     "number":"5", 
     "alphaNumber":"", 
     "poBox":"", 
     "postalCode":"90001", 
     "city":"Los Angeles", 
     "country":"United States" 
     }, 
     "email":[ 
     "[email protected]", 
     "[email protected]" 
     ], 
     "phone":[ 
     "" 
     ] 
    }, 
    "requestReference":2000, 
    "requestStatus":"Request OK", 
    "requestDetails":null 
} 

です。これは、上記のJSON文字列のnull値を返すRootObjectのPlayerオブジェクトです。だから、offcourse nullreference例外がスローされている呼び出し時:

RootObject playerRoot = JsonConvert.DeserializeObject<RootObject>(_the_json_string_shown_above);

+0

あなたのコードはJson.Net 7 – Nico

+0

すべてで私の作品は私のために細かいデシリアライズ - ちょうど逐語的にあなたのコードをテストしました。 Newtonsoft.Jsonバージョン9.0.1の使用 –

答えて

0

私はNewtonsoft.Json 8.0.2.19309を使用していました:

public class RootObject 
{ 
    public Player player { get; set; } 
    public int requestReference { get; set; } 
    public string requestStatus { get; set; } 
    public string requestDetails { get; set; } 
}  

public class Address 
{ 
    public string street { get; set; } 
    public string number { get; set; } 
    public string alphaNumber { get; set; } 
    public string poBox { get; set; } 
    public string postalCode { get; set; } 
    public string city { get; set; } 
    public string country { get; set; } 
} 

public class Player 
{ 
    public Guid id { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string nickname { get; set; } 
    public DateTime dateOfBirth { get; set; } 
    public string sex { get; set; } 
    public Address address { get; set; } 
    public List<string> email { get; set; } 
    public List<string> phone { get; set; } 
} 

これはデシリアライズするために使用されるコードの行があります。 Playerクラス内のAddressオブジェクトにJsonProperty属性を追加する必要がありました。その後、オブジェクトは正しくデシリアライズされます。

public class Player 
{ 
    public Guid id { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string nickname { get; set; } 
    public DateTime dateOfBirth { get; set; } 
    public string sex { get; set; } 
    [JsonProperty] 
    public Address address { get; set; } 
    public List<string> email { get; set; } 
    public List<string> phone { get; set; } 
} 
+0

Newtonsoft.Jsonのどのバージョンを使用していましたか? –

+0

Newtonsoft.Json 8.0.2.19309はこのプロジェクトで使用されているものです。 – neuzehie

+0

非常に奇妙なことに、 '[JsonProperty]'属性なしでは、私と@ heinzbeinzのもので正常に動作したときに逆直列化しません。あなたはそれが最後に働いてうれしい:)幸せなコーディング! –

関連する問題