Tout d'abord, présentez-vous des excuses pour le long article/la question. Mais je suis vraiment frustré car je ne peux pas résoudre ce problème.Désérialise JSON à partir du fichier
J'ai un fichier JSON que j'ai besoin de convertir en un format lisible pour stocker dans une base de données .. Pour commencer, j'ai besoin de lire la date du fichier.
Array myTextFile = File.ReadAllLines(@"C:\path\to\json\file.js");
Mes données dans le fichier ressemble à ceci:
{
"javaClass": "com.untangle.app.firewall.FirewallSettings",
"rules": {
"javaClass": "java.util.LinkedList",
"list": [
{
"block": true,
"conditions": {
"javaClass": "java.util.LinkedList",
"list": [
{
"conditionType": "DST_ADDR",
"invert": false,
"javaClass": "com.untangle.app.firewall.FirewallRuleCondition",
"value": "Some String"
}
]
},
"description": "Suspecious Traffic",
"enabled": true,
"flag": true,
"javaClass": "com.untangle.app.firewall.FirewallRule",
"ruleId": 100001
},
{
"block": false,
"conditions": {
"javaClass": "java.util.LinkedList",
"list": []
},
"description": "TMP ALLOW ALL",
"enabled": false,
"flag": false,
"javaClass": "com.untangle.app.firewall.FirewallRule",
"ruleId": 100002
},
{
"block": false,
"conditions": {
"javaClass": "java.util.LinkedList",
"list": [
{
"conditionType": "DST_PORT",
"invert": false,
"javaClass": "com.untangle.app.firewall.FirewallRuleCondition",
"value": "80,443,8080"
},
{
"conditionType": "SRC_INTF",
"invert": false,
"javaClass": "com.untangle.app.firewall.FirewallRuleCondition",
"value": "non_wan"
}
]
},
"description": "Allow All HTTP(S)",
"enabled": true,
"flag": false,
"javaClass": "com.untangle.app.firewall.FirewallRule",
"ruleId": 100003
},
{
"block": true,
"conditions": {
"javaClass": "java.util.LinkedList",
"list": [
{
"conditionType": "DST_INTF",
"invert": false,
"javaClass": "com.untangle.app.firewall.FirewallRuleCondition",
"value": "wan"
},
{
"conditionType": "SRC_INTF",
"invert": false,
"javaClass": "com.untangle.app.firewall.FirewallRuleCondition",
"value": "non_wan"
}
]
},
"description": "BLOCK ALL (RULEBASE END)",
"enabled": true,
"flag": true,
"javaClass": "com.untangle.app.firewall.FirewallRule",
"ruleId": 10004
}
]
},
"version": 1
}
Après cela, je me suis converti mon JSON en utilisant https://quicktype.io/ à une classe C# qui a donné:
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
// using QuickType;
//
// var data = GettingStarted.FromJson(jsonString);
//
namespace QuickType
{
using System;
using System.Net;
using System.Collections.Generic;
using Newtonsoft.Json;
public partial class GettingStarted
{
[JsonProperty("rules")]
public Rules Rules { get; set; }
[JsonProperty("javaClass")]
public string JavaClass { get; set; }
[JsonProperty("version")]
public long Version { get; set; }
}
public partial class Rules
{
[JsonProperty("javaClass")]
public string JavaClass { get; set; }
[JsonProperty("list")]
public List[] List { get; set; }
}
public partial class List
{
[JsonProperty("enabled")]
public bool Enabled { get; set; }
[JsonProperty("conditions")]
public Conditions Conditions { get; set; }
[JsonProperty("block")]
public bool Block { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("javaClass")]
public string JavaClass { get; set; }
[JsonProperty("flag")]
public bool Flag { get; set; }
[JsonProperty("ruleId")]
public long RuleId { get; set; }
}
public partial class Conditions
{
[JsonProperty("javaClass")]
public string JavaClass { get; set; }
[JsonProperty("list")]
public OtherList[] List { get; set; }
}
public partial class OtherList
{
[JsonProperty("invert")]
public bool Invert { get; set; }
[JsonProperty("conditionType")]
public string ConditionType { get; set; }
[JsonProperty("javaClass")]
public string JavaClass { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
public partial class GettingStarted
{
public static GettingStarted FromJson(string json) => JsonConvert.DeserializeObject<GettingStarted>(json, Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this GettingStarted self) => JsonConvert.SerializeObject(self, Converter.Settings);
}
public class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
};
}
}
A partir de là, je suis coincé sur la façon de traiter les données que j'ai lu dans myTextFile
.. Impossible de comprendre comment obtenir les données dans une structure tabulaire ou tout autre format lisible que je peux effectuer d'autres opérations à la fin r on.
Je ne comprends pas très bien ce qui est demandé. Que se passe-t-il lorsque vous essayez de désérialiser dans les classes C# générées? Je suppose que vous utilisez la bibliothèque 'Newtonsoft' pour désérialiser? – DiskJunky
vous ne devriez probablement pas non plus lire votre fichier dans un tableau de chaînes. Vous allez devoir les assembler pour la plupart (probablement tous?) Json parseurs au travail. Utilisez 'ReadAllText' à la place. alors vous avez une seule chaîne de votre fichier entier au lieu de 1 à n chaînes représentant chaque ligne. – Skintkingle
@Skintkingle Bon, je peux créer une piqûre, après ça, comment puis-je le désérialiser? C'est ma principale préoccupation .. Si je peux désérialiser au format CSV ou texte standard, je serai en mesure d'y faire face – sikas