2017-04-20 9 views
0

JsonClassGeneratorプロジェクトを使用して、JsonとC#のクラスを具体的に変換する作業を進めています。JObjectとの闘い[フィルタリングとマッチング]

これは私が私の会社の中で多くのことを築いてきましたTrackVia APIプロジェクトにフックする建物だいくつかのミドルウェアです。私は私の.Netアプリで、今のデータ層を構築しています

基本的に私は、 "構造"内の "canUpdate"値に基づいて "データ"内のプロパティの1つをシリアル化する必要があるかどうかを判断するために解析する必要があるJson構造を持っています。 JSON構造を持つ

レッツ・スタート:

{ 
    "structure": [ 
    { 
     "name": "Updated", 
     "type": "datetime", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Amount", 
     "type": "currency", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Description", 
     "type": "paragraph", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Created", 
     "type": "datetime", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Quantity", 
     "type": "number", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": true, 
     "canCreate": true 
    }, 
    { 
     "name": "Created By User", 
     "type": "user", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "ID", 
     "type": "number", 
     "required": false, 
     "unique": true, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Last User", 
     "type": "user", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    }, 
    { 
     "name": "Unit_Tracker", 
     "type": "relationship", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": true, 
     "canCreate": true 
    }, 
    { 
     "name": "Project_Materials", 
     "type": "relationship", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": true, 
     "canCreate": true 
    }, 
    { 
     "name": "Record ID", 
     "type": "identifier", 
     "required": false, 
     "unique": false, 
     "canRead": true, 
     "canUpdate": false, 
     "canCreate": false 
    } 
    ], 
    "data": [ 
    { 
     "Updated": "2017-04-20T10:12:00.000-06:00", 
     "Project_Materials(id)": 404, 
     "Unit_Tracker(id)": 209, 
     "Amount": "78.18", 
     "Description": "1/2 in", 
     "Quantity": "1", 
     "Created By User": "By", 
     "Unit_Tracker": "R04-5050", 
     "Project_Materials": "1001755734", 
     "id": 772, 
     "Created": "2017-04-20T10:12:00.000-06:00", 
     "Last User": "By", 
     "Last User(id)": 58443, 
     "Created By User(id)": 58443, 
     "Record ID": "1/2 in" 
    } 
    ], 
    "totalCount": 763 
} 

は、ここで私が一致するために必要なものです。私は "データ"すなわち "更新された"キーを "構造"内のキー値、すなわち構造体 - > "名前"にマッチさせる必要があります: "更新"し、 "canRead"、 "canUpdate"、 "canCreate"何らかのフラグを設定する。私のように、私もJObjectsで働いていない

 [JsonIgnoreSerialization] 
     [JsonProperty("Updated")] 
     public string Updated { get; set; } 

フラグは、「[JsonIgnoreSerialization]」の行を追加するCodewriterを伝え、私の出力テキストで次のようにフォーマットされたプロパティを生成しますコードは現在のところヌルです。私はどこから始めるべきか正確にはわかりません。

これは大したことですが、私はTrackvia内の何百ものテーブルを自分のAPIのJsonエクスポートに基づいてC#クラスに変換しなければならないため、これは数週間かかるもので、カスタマイズされた変換私のために私のC#のクラスを構築するツール - それは壮大な持っているだろう。

私は自分の成功のために仕事をしていきたいと思っています。

+0

答えが分かりましたか?それともあなたの問題を解決しませんでしたか? – Sameer

答えて

0

は、このカスタムクラス構造

public class Root 
{ 
    public List<Structure> structure; 
} 

public class Structure 
{ 
    public string name { get; set; } 
    public string type { get; set; } 
    public string required { get; set; } 
    public string unique { get; set; } 
    public string canRead { get; set; } 
    public string canUpdate { get; set; } 
    public string canCreate { get; set; } 
} 

を試してみて、canUpdateプロパティにアクセスするには、次のコードを使用します。

using (var stream = new StreamReader("sample.json")) 
{ 

    var rootObject = JsonConvert.DeserializeObject<Root>(stream.ReadToEnd()); 
    int index = 0; 
    foreach (var structures in rootObject.structure) 
    { 
      Console.WriteLine(structures.canUpdate); 
    } 
} 

注: sample.jsonは、あなたのJSONレスポンスが含まれています。

関連する問題