using System.Collections;
using System.Collections.Generic;
public static void Main()
FooCollection coll = new FooCollection();
coll.Add(new Foo { Id = 1, Name = "Moe" });
coll.Add(new Foo { Id = 2, Name = "Larry" });
coll.Add(new Foo { Id = 3, Name = "Curly" });
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new FooCollectionConverter());
settings.Formatting = Newtonsoft.Json.Formatting.Indented;
string json = JsonConvert.SerializeObject(coll, settings);
public int Id { get; set; }
public string Name { get; set; }
class FooCollection : IEnumerable<Foo>
private List<Foo> list = new List<Foo>();
public Foo this[string name]
get { return list.Find(f => f.Name == name); }
public IEnumerator<Foo> GetEnumerator()
return list.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
return ((IEnumerable)list).GetEnumerator();
class FooCollectionConverter : JsonConverter
public override bool CanConvert(Type objectType)
return (objectType == typeof(FooCollection));
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
writer.WriteStartObject();
foreach (Foo foo in (FooCollection)value)
writer.WritePropertyName(GetFooKey(foo));
serializer.Serialize(writer, foo);
private string GetFooKey(Foo foo)
public override bool CanRead
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
throw new NotImplementedException();