Skip to content

Instantly share code, notes, and snippets.

@leppie
Last active February 24, 2016 12:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leppie/491950437adca3ee31e0 to your computer and use it in GitHub Desktop.
Save leppie/491950437adca3ee31e0 to your computer and use it in GitHub Desktop.
JSON hell! Dont ask, I can't do anything about the shit I receive...
class Baz<T>
{
[JsonConverter(typeof(BrokenConverter))]
public T[] Foo { get; set; }
}
class Foo
{
public string Bar { get; set; }
}
[TestMethod]
public void Collection()
{
var r = JsonConvert.DeserializeObject<Baz<Foo>> ("{'Foo':[{'Bar': 'one'}]}");
Assert.AreEqual(1, r.Foo.Length);
r = JsonConvert.DeserializeObject<Baz<Foo>>("{'Foo':[{'Bar': 'one'},{'Bar': 'two'}]}");
Assert.AreEqual(2, r.Foo.Length);
}
[TestMethod]
public void One()
{
var r = JsonConvert.DeserializeObject<Baz<Foo>>("{'Foo': {'Bar': 'one'}}");
Assert.IsNotNull(r.Foo);
Assert.AreEqual(1, r.Foo.Length);
}
[TestMethod]
public void None()
{
var r = JsonConvert.DeserializeObject<Baz<Foo>>("{'Foo':{}}");
Assert.IsNotNull(r.Foo);
Assert.AreEqual(0, r.Foo.Length);
}
class BrokenConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.StartArray)
{
var r = serializer.Deserialize(reader, objectType);
return r;
}
else
{
var o = serializer.Deserialize<dynamic>(reader) as JObject;
if (o.HasValues)
{
var r = Activator.CreateInstance(objectType, 1) as Array;
var s = serializer.Deserialize(new JTokenReader(o), objectType.GetElementType());
r.SetValue(s, 0);
return r;
}
else
{
return Activator.CreateInstance(objectType, 0);
}
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment