Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.Net Processes - Support Complex Type Serialization for Dapr Events and Messages #9525

Merged
merged 36 commits into from
Nov 5, 2024

Conversation

crickman
Copy link
Contributor

@crickman crickman commented Nov 4, 2024

Motivation and Context

DAPR events and messages result in runtime failure when contain anything other than the supported primitive types:

https://docs.dapr.io/developing-applications/sdks/dotnet/dotnet-actors/dotnet-actors-serialization/#supported-primitive-types

This means arrays, lists, and objects are not currently able to be emitted by steps.

Description

Translating ProcessMessage, ProcessEvent, and KernelProcessMessage into JSON strings prior to data-contract serialization. As part of this, any relevant type information is included in the json payload.

On deserialization, the type information is utilized to convert any JsonElement data values to the expected type.

Notes:

  • Added unit tests (DAPR specific project)
  • Removed DataContract where not needed (and tests)
  • Verified DAPR demo
  • Attempted to minimize postfix null-supression operator as able.
  • Replaced var with explicit types for my own clarity...and left them for posterity.
  • Eliminated redundant namespace scoping

Contribution Checklist

@crickman crickman added PR: in progress Under development and/or addressing feedback .NET Issue or Pull requests regarding .NET code experimental Associated with an experimental feature enhancement processes labels Nov 4, 2024
@crickman crickman self-assigned this Nov 4, 2024
@crickman crickman requested a review from a team as a code owner November 4, 2024 18:48
@markwallace-microsoft markwallace-microsoft added the kernel Issues or pull requests impacting the core kernel label Nov 4, 2024
@crickman crickman added this pull request to the merge queue Nov 5, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Nov 5, 2024
@crickman crickman added this pull request to the merge queue Nov 5, 2024
Merged via the queue into main with commit 6fee23c Nov 5, 2024
15 checks passed
@crickman crickman deleted the process-knowntype-upgrade branch November 5, 2024 21:16
github-merge-queue bot pushed a commit that referenced this pull request Nov 7, 2024
### Motivation and Context
<!-- Thank you for your contribution to the semantic-kernel repo!
Please help reviewers and future users, providing the following
information:
  1. Why is this change required?
  2. What problem does it solve?
  3. What scenario does it contribute to?
  4. If it fixes an open issue, please link to the issue here.
-->

Updated ability to serialize complex types here:
#9525

...but missed the remoting boundary for invoke the process. This change
addresses this final gap without altering external patterns.

### Description
<!-- Describe your changes, the overall approach, the underlying design.
These notes will help understanding how your code works. Thanks! -->

Convert event to JSON when invoking `ProcessActor` from
`DaprKernelProcessContext`

### Contribution Checklist
<!-- Before submitting this PR, please make sure: -->

- [X] The code builds clean without any errors or warnings
- [X] The PR follows the [SK Contribution
Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md)
and the [pre-submission formatting
script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts)
raises no violations
- [X] All unit tests pass, and I have added new tests where possible
- [X] I didn't break anyone 😄
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement experimental Associated with an experimental feature .NET Issue or Pull requests regarding .NET code PR: ready for review All feedback addressed, ready for reviews processes
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants