Serializing Collections

Json.NET

Json.NET - Quick Starts & API Documentation Serializing Collections

The JsonSerializer has great support for serializing and deserializing collections of objects.

Serializing

To serialize a collection - a generic list, array, dictionary, or your own custom collection - simply call the serializer with the object you want to get JSON for. Json.NET will serialize the collection and all of the values it contains.

Product p1 = new Product
  {
    Name = "Product 1",
    Price = 99.95m,
    ExpiryDate = new DateTime(2000, 12, 29, 0, 0, 0, DateTimeKind.Utc),
  };
Product p2 = new Product
{
  Name = "Product 2",
  Price = 12.50m,
  ExpiryDate = new DateTime(2009, 7, 31, 0, 0, 0, DateTimeKind.Utc),
};
 
List<Product> products = new List<Product>();
products.Add(p1);
products.Add(p2);
 
string json = JsonConvert.SerializeObject(products, Formatting.Indented);
//[
//  {
//    "Name": "Product 1",
//    "ExpiryDate": "\/Date(978048000000)\/",
//    "Price": 99.95,
//    "Sizes": null
//  },
//  {
//    "Name": "Product 2",
//    "ExpiryDate": "\/Date(1248998400000)\/",
//    "Price": 12.50,
//    "Sizes": null
//  }
//]

Deserializing

To deserialize JSON into a .NET collection just specify the collection type you want to deserialize to. Json.NET supports a wide range of collection types.

string json = @"[
  {
    ""Name"": ""Product 1"",
    ""ExpiryDate"": ""\/Date(978048000000)\/"",
    ""Price"": 99.95,
    ""Sizes"": null
  },
  {
    ""Name"": ""Product 2"",
    ""ExpiryDate"": ""\/Date(1248998400000)\/"",
    ""Price"": 12.50,
    ""Sizes"": null
  }
]";
 
List<Product> products = JsonConvert.DeserializeObject<List<Product>>(json);
 
Console.WriteLine(products.Count);
// 2
 
Product p1 = products[0];
 
Console.WriteLine(p1.Name);
// Product 1

Deserializing Dictionaries

Using Json.NET you can also deserialize a JSON object into a .NET generic dictionary. The JSON object's property names and values will be added to the dictionary.

string json = @"{""key1"":""value1"",""key2"":""value2""}";
 
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
 
Console.WriteLine(values.Count);
// 2
 
Console.WriteLine(values["key1"]);
// value1