求Microsoft.Azure.Management.Logic.Models.Workflow.Definition示例及序列化错误解决
解决Azure Logic Apps SDK中Workflow.CreateOrUpdate的Definition序列化错误问题
我之前也踩过这个坑!问题根源出在两个地方:一是你直接把JSON字符串赋值给了Definition属性,二是你的JSON文件多了不必要的外层节点。
问题分析
Workflow.Definition的类型是object,但它实际需要的是反序列化后的.NET对象(比如JObject或动态类型),而非原始JSON字符串。如果直接传字符串,SDK序列化时会把它当作普通字符串处理,导致Azure收到的请求格式完全不符合预期,自然会抛出序列化错误。
另外你的wfDefinition.json外层多了properties和location节点——Workflow类本身已经有独立的Location属性,Definition只需要包含工作流的核心定义内容(也就是你JSON里properties.definition下的部分)。
修复步骤
修正JSON文件结构
精简wfDefinition.json,只保留工作流核心定义部分:{ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": { "HTTP": { "inputs": { "body": "Test Body", "method": "POST", "uri": "http://ptsv2.com/t/5351a-1565875020/post" }, "runAfter": {}, "type": "Http" } }, "contentVersion": "1.0.0.0", "outputs": {}, "parameters": {}, "triggers": { "Sliding_Window": { "recurrence": { "frequency": "Second", "interval": 3 }, "type": "SlidingWindow" } } }将JSON反序列化为JObject再赋值
借助Azure SDK依赖的Newtonsoft.Json库,把JSON字符串转换成JObject后再赋值给Definition。修改后的代码如下:using Newtonsoft.Json.Linq; var wfLocation = "East US"; var wfDefinitionContent = System.IO.File.ReadAllText(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wfDefinition.json")); // 反序列化为JObject,确保SDK能正确序列化 var wfDefinition = JObject.Parse(wfDefinitionContent); var wkflow = new Microsoft.Azure.Management.Logic.Models.Workflow() { Definition = wfDefinition, Location = wfLocation }; logicManagementClient.Workflows.CreateOrUpdate("xxxxxx", "new-test", wkflow);
这样调整后,SDK会正确生成Azure期望的请求格式,序列化错误就能解决了。
内容的提问来源于stack exchange,提问作者Ashwin Purushotaman
相关产品推荐
相关产品推荐

