2012-02-16 14 views
2

JSONは、JerseyのJAXBシリアライザを使用してJavaで作成されます。 .NETアプリケーションで逆シリアル化する必要があります。 問題は、シリアル化された配列である: 配列は、いくつかの項目JSONオブジェクトが含まれている場合、そのようなものです:私はしたいJSONオブジェクトを.NETリストに非直列化

{"users":[{"name":"user1", "email":"[email protected]"},{"name":"user2", "email":"[email protected]"}]} 

が、オブジェクトが一つだけのアイテムが含まれている場合、それは単純なオブジェクト

{"users":{"name":"user1", "email":"[email protected]"}} 

としてシリアル化されこれを.NETオブジェクトに逆シリアル化します。

public class UserList{ 
    public List<User> users {get;set;} 
} 
public class User{ 
    public string name {get;set;} 
    public string email {get;set;} 
} 

標準の.NETデシリアライザはケースを理解していません。 JSON.NETのデフォルトのデシリアライザを試しましたが、例外がスローされます。おそらくそれは適切に設定する必要がありますか? 第1の場合と第2の場合を扱う方法を提案できますか? P.P.私はJavaシリアライザへのアクセスがありません

+0

シリアル化の方法を変更することはできませんか?この方法はあまり意味がないからです。 – svick

+0

はい、thirdparty製品ですので – Cheburek

答えて

2

Json.Netでは、このようなJSONを処理できるカスタムコンバータを作成できます。

どのように正確に行うかについては、Deserializing JSON when sometimes array and sometimes objectをご覧ください。

+0

@downvoter、あなたのコメントに間違いがないと思いますか? – svick

+0

ありがとう、カスタムコンバータのソリューションは素晴らしい作品! – Cheburek

0

私はこの目的でNewtonsoft.JSONを使用していて、コレクションのシリアライズを非常にうまく管理していました。それを試してみてください。

+0

JSON.NET = Newtonsoft.JSON私は理解しています...それは 'JsonConvert.DeserializeObject (json)'を呼び出して例外をスローします。あなたはあなたのソリューションを投稿できますか? – Cheburek

+0

hmmm ...私はそれをチェックアウトします。 –

+0

'public class ObjectWithAList { [JsonProperty(" List ")] 公開リストリスト=新しいリスト(); } '。このクラスは 'Newtonsoft.Json.JsonSerializer'によって簡単にシリアル化されていますが、何が問題なのですか? –