I’m trying to properly write code to build a data structure to serialize into json.
I’m using json.net.
I don’t want to create a bunch of classes to hold this data, as I thought there should be some classes that will already do this in json.net
I’ve already got all the data I need in a series of nested loops, and now I just want to add them to an object hierarchy before I run JsonConvert.SerializeObject on it.
I’ve already tried code like this, but it doesn’t seem to work
JArray container = new JArray();
container.Add(new JObject(new JProperty("name", "Client1"), new JProperty("projects", new JArray())));
container[0].AddAfterSelf(new JObject(new JProperty("projects", new JArray())));
container[1].AddAfterSelf(new JObject(new JProperty("projects", "Project2")));
container[1].AddAfterSelf(new JObject(new JProperty("projects", "Project3")));
container.Add(new JProperty("name", "Client2"));
var test = JsonConvert.SerializeObject(container);
The problem is that when I use [i]. or ElementAt(i) to access somewhere in the structure, either .Add() is missing or .ElementAt isn’t there.
How do I step through the data structure to make this nicely output the below, or do I have to create my own container class for all of this?
This is the data format I am trying to make.
[
{
"name": "student1",
"projects":
[
{
"name": "Project1",
"tasks":
[
{
"name": "task1",
"id": 2
}
],
"id": 6
}
]
},
{
"name": "Student2",
"projects": [
{
"name": "Project1",
"tasks": [
{
"name": "Task2",
"id": 1
},
{
"name": "Task3",
"id": 3
},
{
"name": "Task4",
"id": 4
}
],
"id": 2
etc…
I think what you’re asking is how to serialize complex business objects in json, but only expose certain properties.
In other words you already have a list of students, but you only want to send very specific data via json. If I’m wrong this answer won’t suit your needs.
So assuming you have a list of students, with a projects property that has an inner property of tasks, this is how I do it without having to create loads of new classes, I use anonymous objects.
Once I’ve created my list of anonymous objects, I simply turn them into a json string.
As pointed out in the comments you don’t need to use json.net, this functionality is available in the framework, add a reference to
System.Web.Extensions.dllthenIf you really want to use loops you can do this to allow you to do more complicated things in the creating of the projects and tasks: