想象一個接受 2 個字串引數的方法:
public int Method(string expression, string variables) { ... }
"expression"預計是數學。需要計算的運算式(例如“1 2”)。如果除了數字和運算子之外還有其他東西,我需要variable在"variables"字串引數中查找,用它代表的數字替換該變數。(不能保證變數是在 中定義的"variables",但我認為這里并不重要)。
輸入示例:
Method("351 x", "{ \"x\":69 }");
// Expected output: 420
其他有效值的示例"variables":
- { "x":123 }
- { "x":123, "y":420 }
- { }
- { "z":69 }
- {“ABC”:777 }
我想知道從 JSON 決議和檢索資料的好方法是什么(每次可能具有不同的結構(即不同數量的屬性和名稱)),并將其與variablein"expression"字串映射?
uj5u.com熱心網友回復:
就個人而言,我會使用Newtonsoft.Json并使用映射到Dictionary<string, object>:
using Newtonsoft.Json;
public int Method(string expression, string variables)
{
var varsDic =
JsonHelper.IsValidJson(variables)
? JsonConvert.DeserializeObject<Dictionary<string, object>>(variables);
: new Dictionary<string, object>()
// ...
}
示例,檔案。
隨著IsValidJson是這樣的:
public static class JsonHelper
{
public static bool IsValidJson(string json)
{
return IsValidJson(json, out _);
}
public static bool IsValidJson(string json, out Exception parseError)
{
if (string.IsNullOrWhiteSpace(json))
{
parseError = new Exception(Resources.JsonEmpty);
return false;
}
json = json.Trim();
if (json.StartsWith(@"{") && json.EndsWith(@"}") || //For object
json.StartsWith(@"[") && json.EndsWith(@"]")) //For array
{
try
{
JToken.Parse(json);
parseError = null;
return true;
}
catch (JsonReaderException x)
{
parseError = x;
return false;
}
catch (Exception x)
{
parseError = x;
return false;
}
}
else
{
parseError = new Exception(Resources.JsonNoStartEnd);
return false;
}
}
另見。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/369365.html
上一篇:無論如何,是否可以在不列出所有語言短代碼的情況下生成隨機語言短代碼?
下一篇:EF添加新記錄而不是更新記錄
