Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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;
 }