Open 4c74356b41 opened 2 years ago
Hi @4c74356b41 , the payload that would not be automatically handled by the runtime or PowerShell in this case with a type conversion to hash table. Currently this behavior is by design. The simple payload example uses just the string, but your actual code example uses both string and an Array, which will need to be casted.
Transferring this issue to the appropriate repo for more insights
fix the docs in this case ;) but I don't understand why is it an issue at all, if convertfrom-json
handles this np
I suspect this is because of: https://github.com/Azure/azure-functions-powershell-worker/blob/23de458d7c4271870bb0126d8deb5e92ab4ed4e3/src/Utility/TypeExtensions.cs#L145
We need to either increase it or make it configurable (or both).
I doubt thats the case, my json is only 2 levels "deep" and I'm using ConvertFrom-Json
without -Depth
parameter (its default is 3). so there is something else in play here most likely.
I'm observing the same behaviour when passing an object with an array as an input between durable functions. If I use an hashtable where one of the properties contain an array I get this as input:
arrayProperty: "obj1 obj2 obj2"
instead of:
arrayProperty: obj1, obj2, obj3
sample repro:
$myInput= @{
prop1= "somestring" # work fine
prop2 = $array # gets passed as a string you would get if you execute this: $array -join " "
}
Invoke-DurableActivity -FunctionName function -Input $myInput
so inside my durable activity I have to do:
$myInput.prop2.split().foreach{xxx]
instead of:
$myInput.prop2.foreach{xxx}
basically I'm suggesting something is wrong with how you try and parse arrays
forgot to add: if I'm passing a hashtable like this (between durable activities):
@{
prop1 = "121r13r53"
prop2 = "ewgwgeyw"
prop3 = "325tg24yg24"
etc
}
so all properties are strings - it gets passed fine
Set up a local repo without Durable Functions. If this issue is present, this will be a breaking change.
Hello @4c74356b41 -- I am still looking into this; however, as a workaround you can specified the Content-Type
header in the request to be 'application/json'
. This will ensure that the request body is deserialized to a hashtable if the content is a valid JSON.
okay, that seems to work, what about when passing data in between activities?
@4c74356b41 -- I've created a separate issue to track the Durable activities scenario: Runtime fails to serialize json into hashtable for Durable activities.
To close on this, to deserialize the body into a hashtable, the request should specify the Content-Type
header to be 'application/json'. We will update the docs to reflect this.
Repro steps
Provide the steps required to reproduce the problem:
Expected behavior
returns
System.Collections.Hashtable
Actual behavior
returns
System.String
Known workarounds
forcefully cast to an object with
$Request.Body | ConvertFrom-Json
Related information
https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell?tabs=portal#request-object
{"name": "please_work"}
)