3therk1ll
3therk1ll

Reputation: 2441

How to create a .NET Core Serializer for indented Javascript objects

I am trying to serialize JSON objects received from an API in a cli app. I'm having issues understanding how to create the objects in .NET for JSON objects which have an indented structure.

For example, this is fine:

{"status": "ok" }

public class Success
{
    public string status { get; set; }
}

But something like this is where I'm stuck and both of the examples from the below return null when the client API receives them.

[
  {
    "id": "some_uuid_string_1", 
    "message": "hello"
  }, 
  {
    "id": "some_uuid_string_2", 
    "message": "world"
  }
]

Attempted solution

public class Received

{
    public Dictionary<string,string> received { get; set; }
}

Alternatively I also tried a simpler structure, leaving out the explicit names and just using the IDs and values, which is closer to what my app requires and lets me make smaller requests.

{
  "some_uuid_string_1": "hello", 
  "some_uuid_string_2": "world"
}

For this example I tried this, a list of key value pairs in the form of a dictionary.

public class Message
{
    public Dictionary<string,string> message { get; set; }
}

public class Received
{
    public List<Message> received { get; set; }
}

How can I create objects in C# for these two structures? One indented with set names and one 'generic' with no set names.

Upvotes: 0

Views: 50

Answers (2)

maraaaaaaaa
maraaaaaaaa

Reputation: 8193

public class MyClass
{
    public string id { get; set; }
    public string message { get; set; }
}

[
  {
    "id": "some_uuid_string", 
    "message": "hello"
  }, 
  {
    "id": "some_uuid_string", 
    "message": "world"
  }
]

Deserializes to a List<MyClass> or MyClass[]


{
  "some_uuid_string_1": "hello", 
  "some_uuid_string_2": "world"
}

Deserializes to

public class MyClass
{
    public string some_uuid_string_1 { get; set; }
    public string some_uuid_string_2 { get; set; }
}

or Dictionary<string, string>


The reason your Received class solution didn't work is because it is expecting a JSON property of received, as your class has a property named received, but the JSON does not.

This is the same issue with your Message class. Your class has property message whereas your JSON does not.

Upvotes: 2

Serge
Serge

Reputation: 43931

create a class

public class MessageId
{
    public string id { get; set; }
    public string message { get; set; }
}

you can deserialize your json

using Newtonsoft.Json;

var messages=JsonConvert.DeserializeObject<List<MessageId>>(yourJson);

Upvotes: 0

Related Questions