private JsonElement FindElement <T>() { string json; using (StreamReader file = File.OpenText(path)) { json = file.ReadToEnd(); } JsonDocument doc = JsonDocument.Parse(json); if (typeof(T) == classs) { return(doc.RootElement); } PropertyInfo[] properties = classs.GetProperties(); JsonElement result = default; foreach (PropertyInfo pi in properties) { FindElementnotRecursive <T>(pi, doc.RootElement, ref result); } JsonElement d = default; if (result.Equals(d)) { throw new ArgumentNullException($"{nameof(result)} is null"); } return(result); }
public static StorageCosts FromJson(JsonElement json) { if (json.Equals(null)) { return(null); } try { double dataStorageCostPerGB = 0; double writeOperationsCostPerTenThousand = 0; double readOperationsCostPerTenThousand = 0; double dataRetrievalCostPerGB = 0; double dataWriteCostPerGB = 0; JsonElement token = json.GetProperty("DataStorageCostPerGB"); double.TryParse(token.ToString(), out dataStorageCostPerGB); token = json.GetProperty("WriteOperationsCostPerTenThousand"); double.TryParse(token.ToString(), out writeOperationsCostPerTenThousand); token = json.GetProperty("ReadOperationsCostPerTenThousand"); double.TryParse(token.ToString(), out readOperationsCostPerTenThousand); token = json.GetProperty("DataRetrievalCostPerGB"); double.TryParse(token.ToString(), out dataRetrievalCostPerGB); token = json.GetProperty("DataWriteCostPerGB"); double.TryParse(token.ToString(), out dataWriteCostPerGB); return(new StorageCosts(dataStorageCostPerGB, writeOperationsCostPerTenThousand, readOperationsCostPerTenThousand, dataRetrievalCostPerGB, dataWriteCostPerGB)); } catch (Exception) { return(null); } }
private void FindElementnotRecursive <T>(PropertyInfo pi, JsonElement parentNode, ref JsonElement result) { foreach (var node in parentNode.EnumerateObject()) { JsonElement doc = default; if (node.Name == pi.Name && pi.PropertyType == typeof(T) && result.Equals(doc)) { result = node.Value; } } }
private static bool JsonHasItems(JsonDocument doc) { // a JSON array whose entries are items has the "parts" property // in its entries JsonElement firstEntry = doc.RootElement.EnumerateArray().FirstOrDefault(); // if empty result really won't matter if (firstEntry.Equals(default(JsonElement))) { return(false); } return(firstEntry.TryGetProperty("parts", out JsonElement _)); }
internal static bool EqualsWithStringCoercion(JsonElement value, JsonElement queryValue) { if (value.Equals(queryValue)) { return(true); } // Handle comparing an integer with a float // e.g. Comparing 1 and 1.0 if (value.ValueKind == JsonValueKind.Number && queryValue.ValueKind == JsonValueKind.Number) { return(value.GetDouble() == queryValue.GetDouble()); } if (queryValue.ValueKind != JsonValueKind.String) { return(false); } return(string.Equals(value.ToString(), queryValue.GetString(), StringComparison.Ordinal)); }