2017-04-20 2 views
0

Je travaille sur la conversion spécifique des classes Json en C# en utilisant le projet JsonClassGenerator.Lutter avec un JObject [] Filtrage et correspondance

Ceci est pour certains middleware Je construis pour accrocher à un projet API Trackvia mon entreprise a construit beaucoup dans.

Je construis la couche de données maintenant dans mon application .Net

Essentiellement, j'ai une structure Json que j'ai besoin d'analyser pour déterminer si je devrais sérialiser l'une des propriétés dans "données" en fonction de sa valeur "canUpdate" dans "structure".

LET début de la structure 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 
} 

Voici ce que je dois répondre. Je dois faire correspondre une clé dans "données" ie "Mis à jour" avec une valeur clé dans "structure" ie structure -> "nom": "Mise à jour" puis déterminer la valeur de "canRead", "canUpdate", "canCreate" pour mettre un drapeau de quelque sorte.

Le drapeau sera alors dire au CodeWriter d'ajouter une ligne « [JsonIgnoreSerialization] » et produire dans mon texte une propriété au format émis comme suit:

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

Je n'ai même travaillé avec JObjects donc mon le code est nul pour le moment parce que je ne sais pas exactement par où commencer.

La raison pour laquelle c'est un gros problème est que je dois convertir des centaines de tables dans Trackvia en classes C# dans mon application basée sur l'exportation Json de leur API - cela me prendra des semaines et voudrait avoir une conversion personnalisée outil qui construit mes classes C# pour moi - donc ce serait génial d'avoir.

Ne cherchez pas de documents, je suis prêt à travailler pour mon propre succès besoin d'une certaine direction.

+0

Avez-vous trouvé la réponse utile? Ou cela n'a pas résolu votre problème? – Sameer

Répondre

0

Essayez cette structure de classe personnalisée

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; } 
} 

et utiliser le code suivant pour accéder à la propriété 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); 
    } 
} 

Note: sample.json contient votre réponse JSON.