2016-04-18 17 views
0

REST呼び出しから受け取ったJSON文字列を、Userという名前のクリーンなC#オブジェクトにデシリアライズしようとしています。しかし、返されるJSONには、私が無視したいと思っている多くの「綿毛」があります。次のようにDeserialise JSONラッピングを無視する

JSON文字列は次のとおりです。

{ 
    "Items": [ 
    { 
     "LoginID": "A", 
     "EmployeeID": "1", 
     "FirstName": "A", 
     "LastName": "A", 
     "MiddleName": "", 
     "PrimaryEmail": "[email protected]", 
     "Active": true, 
     "CellPhoneNumber": null, 
     "OrganizationUnit": null, 
     "ID": null, 
     "URI": null 
    }, 
    { 
     "LoginID": "B", 
     "EmployeeID": "2", 
     "FirstName": "B", 
     "LastName": "B", 
     "MiddleName": "", 
     "PrimaryEmail": "[email protected]", 
     "Active": true, 
     "CellPhoneNumber": null, 
     "OrganizationUnit": null, 
     "ID": null, 
     "URI": null 
    } 
    ], 
    "NextPage": null 
} 

私のように定義されたユーザーオブジェクトの配列にこれを変換したい:

[DataContract] 
    public class User 
    { 
     [DataMember] 
     public string LoginID { get; set; } 
     [DataMember] 
     public string EmployeeID { get; set; } 
     [DataMember] 
     public string FirstName { get; set; } 
     [DataMember] 
     public string LastName { get; set; } 
     [DataMember] 
     public string MiddleName { get; set; } 
     [DataMember] 
     public string PrimaryEmail { get; set; } 
     [DataMember] 
     public bool Active { get; set; } 
     [DataMember] 
     public object CellPhoneNumber { get; set; } 
     [DataMember] 
     public object OrganizationUnit { get; set; } 
     [DataMember] 
     public object ID { get; set; } 
     [DataMember] 
     public object URI { get; set; } 
    } 

私はNewtonsoftを使用しないようにしようとしています.Json、私はできるだけ依存性を少なくしたいと思っています。

標準DataContractJsonSerializerを使用すると、返されるデータストリームが使用されるため、機能しません。 JSONをクラス構造に合わせて使用​​することは避けたい、特にそれらのクラスがコードのユーザーに公開されている場合は使用しないでください。

要するに、Newtonsoft.Jsonを使用せずにJSON文字列の特定の部分だけをデシリアライズできますか?そうでない場合は、JSONをデシリアライズするベストプラクティスとクリーンな方法は何ですか?私はあなたがNewtonSoft.Jsonを使用せずにそれを行うことができるかどうかわからない

おかげ

+1

私はあなたにそれを壊すことを嫌いですが、目標を達成するためにプログラミングをしなければならないでしょう。外部データから内部表現までのマッパーに使用するのが一般的です。そうする必要があるでしょう。また、文字列をMemoryStreamに変換するのは簡単ではありません。そのため、 'DataContractSerializer'からあなたを抑えることはできません。 – Crowcoder

+0

ライブラリーになるので、私はそれを吸い上げてすべてのルートオブジェクトを内部クラスに入れて、ユーザーがこれらのクラスを見ないようにすることを考えています。それは少し汚れているので、私はより洗練されたソリューションを考え出すことを望んでいた。 JSON文字列を手にしなくても不可能な場合、これらのルートクラスはより良い、より安全なソリューションかもしれません。 – plusheen

答えて

0

私は通常、あなたが私たちを見せている場合にこのオプションの1つを使用します。

値はnullになります

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 

またはオールウェイズ直列化復元のために無視:

[JsonIgnore] 

この二つのオプションは、逆シリアル化のために無視されます。