public void ConvertObjectWithRenames() { string json = "{\"prop\":\"test\",\"booleanproperty\":true}"; RuntimeTypeData typeData = new RuntimeTypeData(); typeData.Type = typeof(DynamicTypedObjectConverterTestsObject); typeData.Properties.Add("property", new ParameterData() { JsonName = "prop", Name = "property", Type = new RuntimeTypeData() { Type = typeof(string) } }); DynamicTypedObjectConverter converter = new DynamicTypedObjectConverter(typeData); JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(converter); DynamicTypedObjectConverterTestsObject result = JsonConvert.DeserializeObject <DynamicTypedObjectConverterTestsObject>(json, settings); Assert.NotNull(result); Assert.Equal("test", result.Property); Assert.True(result.BooleanProperty); string reserialized = JsonConvert.SerializeObject(result, settings); Assert.Equal(json, reserialized); }
public void RegistersAllSubConverters() { GeneratedModule module = new GeneratedModule(null); OperationData test = new OperationData("testoperationid", "Get-Test"); module.Operations["testoperationid"] = test; RuntimeTypeData jsonParmData = new RuntimeTypeData() { Type = typeof(LiveTestRequestConverterTestsObject) }; jsonParmData.Properties["property"] = new ParameterData() { Name = "property", JsonName = "prop", Type = new RuntimeTypeData() { Type = typeof(string) } }; test.Parameters["jsonparm"] = new ParameterData() { Name = "jsonParm", Type = jsonParmData }; LiveTestRequestConverter converter = new LiveTestRequestConverter(module); JsonSerializerSettings settings = new JsonSerializerSettings(); converter.RegisterSelf(settings); // 1. LiveTestRequestConverter // 2. DynamicTypedObjectConverter for LiveTestRequestConverterTestsObject Assert.Equal(2, settings.Converters.Count); }
private void RegisterTypeConverter(RuntimeTypeData typeData, JsonSerializerSettings settings) { if (typeData != null && typeData.Type != null && typeData.Type.GetConstructor(new Type[] { }) != null && typeData.Properties.Count > 0) { Log("Registering JSON converter for type: {0}", typeData.Type.FullName); settings.Converters.Add(new DynamicTypedObjectConverter(typeData)); foreach (ParameterData property in typeData.Properties.Values) { RegisterTypeConverter(property.Type, settings); } } }
public void ConvertsMappedPropertyOfParameter() { GeneratedModule module = new GeneratedModule(null); OperationData test = new OperationData("testoperationid", "Get-Test"); module.Operations["testoperationid"] = test; RuntimeTypeData jsonParmData = new RuntimeTypeData() { Type = typeof(LiveTestRequestConverterTestsObject) }; jsonParmData.Properties["property"] = new ParameterData() { Name = "property", JsonName = "prop", Type = new RuntimeTypeData() { Type = typeof(string) } }; test.Parameters["jsonparm"] = new ParameterData() { Name = "jsonParm", Type = jsonParmData }; LiveTestRequestConverter converter = new LiveTestRequestConverter(module); JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(converter); settings.Converters.Add(new DynamicTypedObjectConverter(jsonParmData)); string json = "{\"method\":\"A.testOperationId\",\"jsonrpc\":\"2.0\",\"id\":\"0\",\"params\":{\"jsonparm\":{\"prop\":\"testValue\"}}}"; LiveTestRequest request = JsonConvert.DeserializeObject <LiveTestRequest>(json, settings); Assert.NotNull(request); Assert.Equal("0", request.Id); Assert.Equal("2.0", request.JsonRpc); Assert.Equal("A.testOperationId", request.Method); Assert.Equal("testoperationid", request.OperationId); Assert.True(request.Params.ContainsKey("jsonparm")); Assert.Equal(typeof(LiveTestRequestConverterTestsObject), request.Params["jsonparm"].GetType()); Assert.Equal("testValue", ((LiveTestRequestConverterTestsObject)request.Params["jsonparm"]).Property); string reserialized = JsonConvert.SerializeObject(request, settings); Assert.Equal(json, reserialized); }
public void ConvertNestedObject() { string json = "{ \"obj\": { \"prop\": \"test\", \"booleanproperty\": true }, \"unconvertedobject\": { \"prop\": \"5\" } }"; string expectedJson = "{\"obj\":{\"prop\":\"test\",\"booleanproperty\":true},\"unconvertedobject\":{\"Property\":null}}"; RuntimeTypeData childTypeData = new RuntimeTypeData(); childTypeData.Type = typeof(DynamicTypedObjectConverterTestsObject); childTypeData.Properties.Add("property", new ParameterData() { JsonName = "prop", Name = "property", Type = new RuntimeTypeData() { Type = typeof(string) } }); RuntimeTypeData parentTypeData = new RuntimeTypeData(); parentTypeData.Type = typeof(DynamicTypedObjectConverterTestsNestedObject); parentTypeData.Properties.Add("object", new ParameterData() { JsonName = "obj", Name = "object", Type = childTypeData }); DynamicTypedObjectConverter childConverter = new DynamicTypedObjectConverter(childTypeData); DynamicTypedObjectConverter parentConverter = new DynamicTypedObjectConverter(parentTypeData); JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(childConverter); settings.Converters.Add(parentConverter); DynamicTypedObjectConverterTestsNestedObject result = JsonConvert.DeserializeObject <DynamicTypedObjectConverterTestsNestedObject>(json, settings); Assert.NotNull(result); Assert.NotNull(result.Object); Assert.Equal("test", result.Object.Property); Assert.True(result.Object.BooleanProperty); Assert.NotNull(result.UnconvertedObject); Assert.Null(result.UnconvertedObject.Property); string reserialized = JsonConvert.SerializeObject(result, settings); Assert.Equal(expectedJson, reserialized); }
public void MergeWith(ParameterData newData) { if (!string.IsNullOrEmpty(newData.Name)) { this.Name = newData.Name; } if (!string.IsNullOrEmpty(newData.JsonName)) { this.JsonName = newData.JsonName; } if (newData.Type != null) { if (this.Type != null) { this.Type.MergeWith(newData.Type); } else { this.Type = newData.Type; } } }
/// <summary> /// Constructor. /// </summary> /// <param name="typeData">Metadata for type this converter should convert.</param> public DynamicTypedObjectConverter(RuntimeTypeData typeData) { this.typeData = typeData; }