Serialize array of objects as one object with a named property for each object in C# with JSON serializer

I have a List that, when serialized as JSON gives me an array of objects. However, I need the serialized version to be structured as follows:

{
  "item3":{
    "id":3,
    "name":"monkey"
  },
  "item4":{
    "id":4,
    "name":"turtle"
  }
}

Currently, the JSON serialization is structured like this:

[
  {
    "id":3,
    "name":"monkey"
  },
  {
    "id":4,
    "name":"turtle"
  }
]

My goal is to be able to reference the array by item ID instead of numeric index (ie. arr["item3"].name instead of arr[0].name).

Answers


You might did that just putting the data into a dictionary is enough for JaveScripySerializer:

var dict = list.ToDictionary(
    item => "item" + item.id);

(and serialize dict)

If not:

I don't have a PC handy for an example, but you should be able to:

  • write a wrapper class that encapsulated the list/array
  • use the JavaScriptSerializer class
  • after creating the serializer, associate the wrapper-type with a custom serializer
  • in the custom serializer, iterate over the data, adding a key to the dictionary per-item, i.e. data.Add("item"+i,list[i]);

You associate custom maps via RegisterConverters: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx

Note you don't need to write a deserialize unless you need that too.

If you get stuck, I'll try to ad an example later.


Need Your Help

MEAN stack angular html <img> tag inject not working

javascript html angularjs

im new to angular so im trying something new to get used to it.

Error in form collection MVC 4

asp.net asp.net-mvc linq entity-framework asp.net-mvc-4

i'm trying to add textbox values to DB using formcollection class but every time it is giving only one textbox value not other textboxes values. i'm sharing what i have done so far. please guide me