0

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.

2 Answers 2

2
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.

Sign up to request clarification or add additional context in comments.

1 Comment

No duplication, I edited the post to show
0

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);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.