public void TestDictionaryConversion() { var x = new { Text = "Behold, an anonymous object", Number = 42 }; var y = new { Text = "Another anonymous object", Number = 69 }; var z = new TestClass0(); var w = new TestClass1(42); var v = ReflectionUtilities.CreateEmpty <TestClass0>(); var dx = x.ToDictionary(); var dy = y.ToDictionary(); var dz = z.ToDictionary(); var dw = w.ToDictionary(); var dv = v.ToDictionary(); Assert.AreEqual(x.Text, dx["Text"]); Assert.AreEqual(y.Text, dy["Text"]); Assert.AreNotEqual(x.Text, dy["Text"]); Assert.AreEqual(x.Number, dx["Number"]); Assert.AreEqual(y.Number, dy["Number"]); Assert.AreNotEqual(x.Number, dy["Number"]); Assert.AreNotEqual(dx["Text"], dx["Number"]); Assert.AreEqual(true, dz["IsInitialized"]); Assert.AreEqual(43, dw["Value"]); Assert.AreEqual(false, dv["IsInitialized"]); }
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) { return(null); } if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException($"Expected object start, got '{reader.TokenType}' instead."); } var obj = ReflectionUtilities.CreateEmpty <T>(); var model = this.Model; while (reader.Read() && reader.TokenType != JsonTokenType.EndObject) { if (reader.TokenType != JsonTokenType.PropertyName) { throw new JsonException($"Expected property name, got '{reader.TokenType}' instead."); } var name = reader.GetString(); if (!reader.Read()) { throw new EndOfStreamException("Reached end of JSON stream."); } var prop = model.GetJsonProperty(name); if (prop == null) { throw new JsonException($"Property '{name}' is not present on object of type '{typeToConvert}'."); } var val = JsonSerializer.Deserialize(ref reader, prop.Property.PropertyType, options); prop.Property.SetValue(obj, val); } return(obj); }
public void TestEmptyObjects() { // Create empty objects var o0 = ReflectionUtilities.CreateEmpty <TestClass0>(); var o1 = ReflectionUtilities.CreateEmpty <TestClass1>(); var p0 = typeof(TestClass0).CreateEmpty() as TestClass0; var p1 = typeof(TestClass1).CreateEmpty() as TestClass1; // Test that they are empty Assert.IsFalse(o0.IsInitialized); Assert.AreEqual(0, o1.Value); // Test that nongeneric variants created appropriate types Assert.IsNotNull(p0); Assert.IsInstanceOfType(p0, typeof(TestClass0)); Assert.IsNotNull(p1); Assert.IsInstanceOfType(p1, typeof(TestClass1)); // Test that the objects are empty Assert.IsFalse(p0.IsInitialized); Assert.AreEqual(0, p1.Value); }