示例#1
0
        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);
     }
 }
示例#3
0
 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;
         }
     }
 }
示例#4
0
        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));
        }