How to serialize a dynamic object to a JSON string in dotnet core?

9,987

Solution 1

I had the same problem and I fixed it this way

using System.Text.Json;

string serializedObject = JsonSerializer.Serialize(x.Action); //Instead of use JsonConvert.SerializeObject(x.Action);

Instead of Newtonsoft.Json you have to use System.Text.Json.

Solution 2

Use Newtonsoft.Json instead of default System.Text.Json

Add Microsoft.AspNetCore.Mvc.NewtonsoftJson package from nuget and services.AddControllers().AddNewtonsoftJson() in Startup.cs/ConfigureServices()

Solution 3

Try this

var jsonString=s.Action.ToString();

This will give you the json string

Share:
9,987

Related videos on Youtube

Todd Worden
Author by

Todd Worden

Updated on September 16, 2022

Comments

  • Todd Worden
    Todd Worden almost 2 years

    I am passing a JSON payload to an API Controller, and one of the fields is dynamic because the field needs to be passed again as a JSON string to another API. The dotnet core 3.1 middle layer shouldn't be concerned with typing, as the payload will change.

    This is the object that is passed into the API Controller:

        public class GitHubAction
        {
            [JsonProperty("Title")]
            public string Title { get; set; }
    
            [JsonProperty("Enabled")]
            [JsonConverter(typeof(BooleanParseStringConverter))]
            public bool Enabled { get; set; }
    
            [JsonProperty("Action")]
            [JsonConverter(typeof(ExpandoObjectConverter))]
            public dynamic Action { get; set; }
        }
    

    Here is a picture of that dynamic object looks like in VSCode:

    enter image description here

    When I use JsonConvert.SerializeObject(x.Action); the string result isn't being properly converted, but instead serializes to ValueKind: "{\"ValueKind\":1}".

    What I want to get is the action object value as a JSON string, which should look like "{"createRepository":{"onboarding":{"service":{"organization":"foo","repositoryName":"foo-2-service","description":"A test service."}}}}"

    Is there a simple solution for serializing a dynamic object?

    • yaakov
      yaakov over 4 years
      Is this using Newtonsoft.Json, or System.Text.Json?
    • Todd Menier
      Todd Menier over 4 years
      ValueKind is from System.Text.Json, but JsonConvert is from Newtonsoft. It's quite possible you can't mix the 2 here. Try using JsonSerializer.Serialize instead of JsonConvert.SerializeObject.
  • Yogi
    Yogi over 2 years
    This doesn't appear to answer the question as System.Text.Json doesn't currently handle dynamic properties.