Azure Logic Apps .NET SDK json 工作流定义中的解析错误

Azure Logic Apps .NET SDK json parsing error in workflow definition

这是我调用 CreateOrUpdateAsync 时失败的代码块。逻辑应用程序在 Azure 中运行良好,但当我尝试使用 .NET SDK 创建它时,我遇到 JSON 解析问题。

'foreach': '@variables(""LocationData"")',
            'runAfter': {
                'Initialize_variable_2': [
                    'Succeeded'
                ]
            }

这是错误信息。

{“模板验证失败:'第 1 行和第 263 列的模板操作 'For_each' 无效:\”模板语言表达式 'variables(\"LocationData\")' 无效:位置 '10' 处的字符串字符 '\"' 不是预期的。\".'."}

如果我更改为单引号,则会出现此错误。

'foreach': '@variables('LocationData')',
                'runAfter': {
                    'Initialize_variable_2': [
                        'Succeeded'
                    ]
                }

{“解析值后遇到意外字符:L.路径 'actions.For_each.foreach',第 651 行,位置 40。”}

这个 JSON 格式化器和验证器也不喜欢它。

https://jsonformatter.curiousconcept.com/

有人知道这个问题以及如何解决吗?

非常感谢任何帮助!谢谢!

从我们这边复制后,这是它为我们工作的方式。

"For_each": {
    "foreach": "@variables('location')",
    "runAfter": {
        "Initialize_variable_2": [
            "Succeeded"
        ]
    }
}

我继续创建了自己的 类 来处理工作流定义。

这是一个示例。代码很多,但效果很好。

public class LogicApp
{
    public string schema { get; set; }
    public Actions actions { get; set; }
    public string contentVersion { get; set; }
    public Outputs outputs { get; set; }
    public Triggers triggers { get; set; }
} 

public class Actions
{
    public For_Each For_each { get; set; }
}

public class For_Each
{
    public Actions actions { get; set; }
    public string _foreach { get; set; }
    public Runafter runAfter { get; set; }
    public string type { get; set; }
}

我什至写了 类 来处理我的 ParseJson 动作。这是一个示例。

public class Parse_JSON
{
    public Inputs inputs { get; set; }
    public Runafter runAfter { get; set; }
    public string type { get; set; }
}

然后我就这么叫了。

var logicApp = new LogicApp
{

}

最后,我创建了工作流定义 JSON 字符串。这是一个 ASP.Net 核心应用程序。

var options = new JsonSerializerOptions { WriteIndented = true };
string jsonString = ReplaceFirst(JsonSerializer.Serialize(logicApp, options), "schema", "$schema"));

我使用这种方法在第一次出现的单词 schema 中添加了一个 $。

string ReplaceFirst(string text, string search, string replace)
{
       int pos = text.IndexOf(search);
       if (pos < 0)
       {
           return text;
       }
       return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
 }