13

I have a json string with the following structure

{
    "resource": "user",
    "method": "create",
    "fields": {
        "name": "John",
        "surname: "Smith",
        "email": "john@gmail.com"
    }
}

The keys inside fields are variable, that means I don't know them in advance

So, instead of deserializing a json string to an object, I need to traverse the json, in order to get the properties inside fields in a Dictionary or something like that.

I heard about the Json.NET library and it's ability to parse dynamic jsons, but I'm not sure it it's already included in net-core or not.

What would be the standard / easiest way to accomplish that in net-core 2.0. Code example would be appreciated.

opensas
  • 52,870
  • 69
  • 227
  • 340

3 Answers3

26

Yes. You can add Newtonsoft.json package to your .net core project. And to query the dynamic json object, you can use the JObject object provided by the library to parse your json into a dynamic object. Here is the link for the document.

Given your json sample it may look like this

 var resource = JObject.Parse(json);
 foreach (var property in resource.fields.Properties())
 {
   Console.WriteLine("{0} - {1}", property.Name, property.Value);
 }
opensas
  • 52,870
  • 69
  • 227
  • 340
Jaya
  • 3,284
  • 2
  • 27
  • 46
6

Json.NET is the go-to library when you are serializing .NET objects. However, when structure of objects is not static, APIs from System.Json namespace will be simpler to use. System.Json can be used in .NET Core 2.0 by installing a package from NuGet like this:

dotnet add package System.Json --version 4.4.0

Here is a nice tutorial on how to use APIs from System.Json namespace: Working with JSON in .NET – a Silverlight example

Matjaž Drolc
  • 251
  • 2
  • 8
-2
using System.Web.Script.Serialization;
using System.Dynamic;

var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));