コード例 #1
0
        public void SerializeUsingInternalConverter()
        {
            DefaultContractResolver contractResolver = new DefaultContractResolver();
            JsonObjectContract contract = (JsonObjectContract) contractResolver.ResolveContract(typeof (KeyValuePair<string, int>));

            Assert.Equal(typeof(KeyValuePairConverter), contract.InternalConverter.GetType());

            IList<KeyValuePair<string, int>> values = new List<KeyValuePair<string, int>>
            {
                new KeyValuePair<string, int>("123", 123),
                new KeyValuePair<string, int>("456", 456)
            };

            string json = JsonConvert.SerializeObject(values, Formatting.Indented);

            StringAssert.Equal(@"[
  {
    ""Key"": ""123"",
    ""Value"": 123
  },
  {
    ""Key"": ""456"",
    ""Value"": 456
  }
]", json);

            IList<KeyValuePair<string, int>> v2 = JsonConvert.DeserializeObject<IList<KeyValuePair<string, int>>>(json);

            Assert.Equal(2, v2.Count);
            Assert.Equal("123", v2[0].Key);
            Assert.Equal(123, v2[0].Value);
            Assert.Equal("456", v2[1].Key);
            Assert.Equal(456, v2[1].Value);
        }
コード例 #2
0
ファイル: RelationContractResolver.cs プロジェクト: vlko/vlko
 public RelationContractResolver(DefaultContractResolver original, DocumentConvention documentConvention, IEnumerable<Type> rootTypes)
     : base(true)
 {
     _rootTypes = new HashSet<Type>();
     _referenceConverter = new ReferenceConverter(documentConvention);
     foreach (var rootType in rootTypes)
     {
         _rootTypes.Add(rootType);
     }
     DefaultMembersSearchFlags = original.DefaultMembersSearchFlags;
 }
コード例 #3
0
    public void AddPropertyIncludesPrivateImplementations()
    {
      var value = new PrivateImplementationBClass
        {
          OverriddenProperty = "OverriddenProperty",
          PropertyA = "PropertyA",
          PropertyB = "PropertyB"
        };

      var resolver = new DefaultContractResolver();
      var contract = (JsonObjectContract) resolver.ResolveContract(value.GetType());

      Assert.AreEqual(3, contract.Properties.Count);
      Assert.IsTrue(contract.Properties.Contains("OverriddenProperty"), "Contract is missing property 'OverriddenProperty'");
      Assert.IsTrue(contract.Properties.Contains("PropertyA"), "Contract is missing property 'PropertyA'");
      Assert.IsTrue(contract.Properties.Contains("PropertyB"), "Contract is missing property 'PropertyB'");
    }
コード例 #4
0
        //Problem 07.Export Categories by Products Count
        public static string GetCategoriesByProductsCount(ProductShopContext context)
        {
            //var categories = context.Categories
            //    .OrderByDescending(c => c.CategoryProducts.Count)
            //    .Select(c => new
            //    {
            //        Category = c.Name,
            //        ProductsCount = c.CategoryProducts.Count,
            //        AveragePrice = $"{c.CategoryProducts.Average(p => p.Product.Price):f2}",
            //        TotalRevenue = $"{c.CategoryProducts.Sum(p => p.Product.Price):f2}"
            //    })
            //    .ToList();

            var categories = context.Categories
                             .OrderByDescending(c => c.CategoryProducts.Count)
                             .Select(c => new
            {
                Category      = c.Name,
                ProductsCount = c.CategoryProducts.Count,
                AveragePrice  = $"{(c.CategoryProducts.Sum(p => p.Product.Price)/c.CategoryProducts.Count):f2}",
                TotalRevenue  = $"{c.CategoryProducts.Sum(p => p.Product.Price):f2}"
            })
                             .ToList();

            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };
            var jsonSettings = new JsonSerializerSettings
            {
                Formatting       = Formatting.Indented,
                ContractResolver = contractResolver
            };

            string categoriesAsJson = JsonConvert.SerializeObject(categories, jsonSettings);

            return(categoriesAsJson);
        }
コード例 #5
0
        public async Task <bool> Print(VehicleRecord vehicle)
        {
            try
            {
                var printerUrl = Settings.PrinterUrl;

                if (String.IsNullOrWhiteSpace(printerUrl))
                {
                    return(true);
                }

                using (HttpClient client = new HttpClient())
                {
                    var resolver = new DefaultContractResolver()
                    {
                        NamingStrategy = new SnakeCaseNamingStrategy()
                    };
                    var jsonSettings = new JsonSerializerSettings()
                    {
                        ContractResolver = resolver
                    };

                    string        content = JsonConvert.SerializeObject(vehicle, jsonSettings);
                    StringContent body    = new StringContent(content, Encoding.UTF8, "application/json");

                    client.Timeout = new TimeSpan(0, 0, 10);
                    var result = await client.PostAsync(printerUrl, body);

                    var data = await result.Content.ReadAsStringAsync();

                    return(result.IsSuccessStatusCode);
                }
            }
            catch
            {
                return(false);
            }
        }
コード例 #6
0
        private static string GetErrorData(string errorData, out string innerError)
        {
            innerError = string.Empty;
            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            var jsContent = (JObject)JsonConvert.DeserializeObject(errorData, new JsonSerializerSettings()
            {
                ContractResolver = contractResolver
            });

            IDictionary <string, JToken> d = jsContent;

            if (d.TryGetValue("error", out var error))
            {
                var jsError = error as JObject;

                if (jsError.TryGetValue("innererror", out var innerEx))
                {
                    innerError = innerEx.ToString();
                }

                if (jsError.TryGetValue("message", out var message))
                {
                    return(message.ToString());
                }

                return(error.ToString());
            }
            else if (d.TryGetValue("Message", out var message))
            {
                return(message.ToString());
            }

            return(errorData);
        }
コード例 #7
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            EnsureReflectionObject(value.GetType());

            DefaultContractResolver resolver = serializer.ContractResolver as DefaultContractResolver;

            string keyName  = (string)_reflectionObject.GetValue(value, KeyPropertyName);
            object keyValue = _reflectionObject.GetValue(value, ValuePropertyName);

            Type keyValueType = (keyValue != null) ? keyValue.GetType() : null;

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(KeyPropertyName) : KeyPropertyName);
            writer.WriteValue(keyName);
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(TypePropertyName) : TypePropertyName);
            writer.WriteValue((keyValueType != null) ? keyValueType.FullName : null);

            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(ValuePropertyName) : ValuePropertyName);

            if (keyValueType != null)
            {
                string valueJson;
                if (JsonSerializerInternalWriter.TryConvertToString(keyValue, keyValueType, out valueJson))
                {
                    writer.WriteValue(valueJson);
                }
                else
                {
                    writer.WriteValue(keyValue);
                }
            }
            else
            {
                writer.WriteNull();
            }

            writer.WriteEndObject();
        }
        public JsonSerializerSettings CreateDeserializationSettings(Type type)
        {
            if (!mapping.ContainsKey(type))
            {
                JsonSerializerSettings settings = new JsonSerializerSettings();
                if (type == typeof(Token))
                {
                    DefaultContractResolver contractResolver = new DefaultContractResolver
                    {
                        NamingStrategy = new SnakeCaseNamingStrategy()
                    };
                    settings.ContractResolver = contractResolver;
                }
                else
                {
                    settings.ContractResolver = this.deserializationContractResolver;
                }

                mapping[type] = settings;
            }

            return(mapping[type]);
        }
コード例 #9
0
        public void ListInterfaceDefaultCreator()
        {
            var resolver = new DefaultContractResolver();
            var contract = (JsonArrayContract)resolver.ResolveContract(typeof(IList <int>));

            Assert.IsTrue(contract.IsInstantiable);
            Assert.IsNotNull(contract.DefaultCreator);

            contract.DefaultCreator = () => new CustomList <int>();

            var l = JsonConvert.DeserializeObject <IList <int> >(
                @"[1,2,3]",
                new JsonSerializerSettings {
                ContractResolver = resolver
            }
                );

            Assert.AreEqual(typeof(CustomList <int>), l.GetType());
            Assert.AreEqual(3, l.Count);
            Assert.AreEqual(1, l[0]);
            Assert.AreEqual(2, l[1]);
            Assert.AreEqual(3, l[2]);
        }
コード例 #10
0
        private PushMessage FromModel(PushMessageModel model)
        {
            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };
            var serializationSettings = new JsonSerializerSettings()
            {
                ContractResolver  = contractResolver,
                NullValueHandling = NullValueHandling.Ignore
            };

            var serialized = JsonConvert.SerializeObject(model, serializationSettings);
            var content    = new StringContent(serialized, Encoding.UTF8, "application/json");

            var pushMessage = new PushMessage(content)
            {
                //Topic = message.Topic,
                //Urgency = message.Urgency
            };

            return(pushMessage);
        }
コード例 #11
0
        public void Test_DoesNotThrowException_IfTestIsSuccessful()
        {
            // Arrange
            var key        = "Name";
            var dictionary = new Dictionary <string, List <object> >();
            var value      = new List <object>()
            {
                "James",
                2,
                new Customer("James", 25)
            };

            dictionary[key] = value;
            var dictionaryAdapter = new DictionaryAdapter <string, List <object> >();
            var resolver          = new DefaultContractResolver();

            // Act
            var testStatus = dictionaryAdapter.TryTest(dictionary, key, resolver, value, out var message);

            //Assert
            Assert.True(testStatus);
            Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
        }
コード例 #12
0
        public Task BroadcastMessage(string name, string message)
        {
            WebSocketItem webSocketItem = new WebSocketItem
            {
                Command = WebSocketCommand.ChatMsg,
                Name    = name,
                Message = message
            };

            // ref: https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm (200828)
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            string jsonStr = JsonConvert.SerializeObject(webSocketItem, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            return(BroadcastJsonMessage(jsonStr));
        }
コード例 #13
0
        public async Task <IActionResult> GetHierarchyTree(int?parentId)
        {
            AccountHierarchy root = parentId.HasValue ?
                                    await _dbContext.AccountHierarchies.FindAsync((long)parentId) :
                                    await _dbContext.AccountHierarchies.OrderBy(a => a.Id).FirstOrDefaultAsync();

            TreeBuilder treeBuilder = new TreeBuilder(_dbContext);
            //var account = treeBuilder.BuildHierarchyTreeRecursive(root);
            var account = treeBuilder.BuildHierarchyTreeRecursive(root);

            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };
            string json = JsonConvert.SerializeObject(account, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            //Console.WriteLine(json);
            return(View("GetTree", json));
        }
コード例 #14
0
        //Problem 16 - Export Local Suppliers
        public static string GetLocalSuppliers(CarDealerContext context)
        {
            var suppliers = context
                            .Suppliers
                            .Where(s => !s.IsImporter)
                            .ToList();

            var supplierDtos = Mapper.Map <IEnumerable <Supplier>,
                                           IEnumerable <SupplierDto> >(suppliers);

            DefaultContractResolver contractResolver = new DefaultContractResolver()
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            var jsonResult = JsonConvert.SerializeObject(supplierDtos, new JsonSerializerSettings()
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            return(jsonResult);
        }
コード例 #15
0
        public void TryTest_DoesNotThrowException_IfTestSuccessful()
        {
            var     adapter = new DynamicObjectAdapter();
            dynamic target  = new DynamicTestObject();
            var     value   = new List <object>()
            {
                "Joana",
                2,
                new Customer("Joana", 25)
            };

            target.NewProperty = value;
            var segment  = "NewProperty";
            var resolver = new DefaultContractResolver();

            // Act
            var testStatus = adapter.TryTest(target, segment, resolver, value, out string errorMessage);

            // Assert
            Assert.Equal(value, target.NewProperty);
            Assert.True(testStatus);
            Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message");
        }
コード例 #16
0
        /// <summary>
        /// PascalCase로 이뤄진 객체를 snake_case json으로 직렬화.
        /// </summary>
        /// <typeparam name="T">변환할 객체 형태</typeparam>
        /// <param name="obj">변환할 객체</param>
        /// <returns></returns>
        private static JObject SerializeSnakeCase <T>(T obj)
        {
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new SnakeCaseNamingStrategy()
            };

            try
            {
                var json = JsonConvert.SerializeObject(obj, new JsonSerializerSettings
                {
                    ContractResolver = contractResolver,
                    Formatting       = Formatting.Indented
                });
                return(JObject.Parse(json));
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }

            return(new JObject());
        }
コード例 #17
0
        public BaseController()
        {
            _placesService   = DiProxy.Get <IPlacesService>();
            _sessionOperator = DiProxy.Get <SessionOperator>();
            _mapper          = DiProxy.Get <IMapper>();
            _localeService   = DiProxy.Get <ILocalizationService>();
            _localizer       = DiProxy.Get <ILocalizer>();

            var config = DiProxy.Get <ConfigValuesCollection>();

            _userFilesUrlPrefix = config.GetUserFilesUrlPrefix();

            var contractResolver = new DefaultContractResolver()
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            _jsonSerializerSettings = new JsonSerializerSettings()
            {
                ContractResolver = contractResolver
            };
            _jsonSerializerSettings.Converters.Add(new StringEnumConverter());
        }
コード例 #18
0
ファイル: WebApiConfig.cs プロジェクト: ashraf789/DotNetAPI
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );

            var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new SnakeCaseNamingStrategy()
            };

            formatter.SerializerSettings.ContractResolver = contractResolver;
            config.Formatters.Clear();
            config.Formatters.Add(formatter);
        }
コード例 #19
0
        public AdyenHttpClient(HttpClient httpClient, IConfiguration configuration, ILogger <AdyenHttpClient> logger)
        {
            _httpClient = httpClient;
            string apiKey = configuration["ApiKey"];

            _httpClient.DefaultRequestHeaders.Add("X-API-key", apiKey);
            _logger           = logger;
            _contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };
            _jsonSerializeSettings = new JsonSerializerSettings()
            {
                ContractResolver      = _contractResolver,
                Formatting            = Formatting.Indented,
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                NullValueHandling     = NullValueHandling.Ignore
            };

            IConfigurationSection adyenConfig = configuration.GetSection("AdyenConfiguration");

            _configuration = adyenConfig.Get <AdyenConfiguration>();
        }
コード例 #20
0
        /// <summary>
        /// snake_case로 이뤄진 Json을 PascalCase로 역직렬화.
        /// </summary>
        /// <typeparam name="T">반환 형태</typeparam>
        /// <param name="json">목표 Json</param>
        /// <returns>역직렬화된 Json</returns>
        private static T DeserializeSnakeCase <T>(string json)
        {
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new SnakeCaseNamingStrategy()
            };

            try
            {
                var resp = JsonConvert.DeserializeObject <T>(json, new JsonSerializerSettings
                {
                    ContractResolver = contractResolver,
                    Formatting       = Formatting.Indented
                });
                return(resp);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }

            return(default(T));
        }
コード例 #21
0
        public async Task <IActionResult> Handle(SendPushNotificationsCommand request, CancellationToken cancellationToken)
        {
            var pushNotificationToSend = _mapper.Map <PushNotification>(request);

            foreach (var notification in request.PushNotificationIds)
            {
                DefaultContractResolver contractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                };
                pushNotificationToSend.To = notification;
                var pushNotification = await "https://fcm.googleapis.com/fcm".AppendPathSegment("send")
                                       .WithHeader("Authorization", "key=AAAAp6mIFl8:APA91bGoewvoSfIbLcHFL4OCxPa19drL-pWuQ5YYpsGh3gh_xdWLyZTS2F3pwpUJpMPWPiIpkJTq0oPbIomCCpG3zFTEutxDJGJT703uebKnTCFnYe9GcqzIuFURQwYueOIW6eINonjY")
                                       .PostAsync(new StringContent(JsonConvert.SerializeObject(pushNotificationToSend, new JsonSerializerSettings
                {
                    ContractResolver = contractResolver,
                    Formatting       = Formatting.Indented
                }), Encoding.UTF8, "application/json"))
                                       .ReceiveJson();
            }

            return(HttpResponseCodeHelper.NotContent());
        }
コード例 #22
0
        public async Task SendSignal(string signal, string targetConnectionId)
        {
            var callingUser = User.Get(Context.ConnectionId);
            var targetUser  = User.Get(targetConnectionId);

            if (callingUser == null || targetUser == null)
            {
                return;
            }

            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            var call = JsonConvert.SerializeObject(callingUser, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            await Clients.Client(targetConnectionId).SendAsync("receiveSignal", call, signal);
        }
コード例 #23
0
        public async Task CacheResponseAsync(string cacheKey, object response, TimeSpan timeToLive)
        {
            if (response == null)
            {
                return;
            }

            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy
                {
                    OverrideSpecifiedNames = false
                }
            };

            var serialisedResponse = JsonConvert.SerializeObject(response, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            await _database.StringSetAsync(cacheKey, serialisedResponse, timeToLive);
        }
コード例 #24
0
        //------------------- TASK 16 ---- EXPORT LOCAL SUPPLERS --------------------------------
        public static string GetLocalSuppliers(CarDealerContext context)
        {
            var suppliers = context.Suppliers.Where(s => s.IsImporter == false)
                            .Select(s => new
            {
                Id         = s.Id,
                Name       = s.Name,
                PartsCount = s.Parts.Count,
            })
                            .ToArray();
            var resolver = new DefaultContractResolver()
            {
                NamingStrategy = new DefaultNamingStrategy()
            };

            string json = JsonConvert.SerializeObject(suppliers, new JsonSerializerSettings()
            {
                ContractResolver = resolver,
                Formatting       = Formatting.Indented
            });

            return(json);
        }
コード例 #25
0
        public string GetJson()
        {
            if (!CheckEnvironment())
            {
                return(null);
            }
            var jsonobj = new
            {
                build,
                os,
                run,
                tests
            };
            var settings = new JsonSerializerSettings();
            var resolver = new DefaultContractResolver();

            resolver.NamingStrategy = new CamelCaseNamingStrategy()
            {
                ProcessDictionaryKeys = false
            };
            settings.ContractResolver = resolver;
            return(JsonConvert.SerializeObject(jsonobj, Formatting.Indented, settings));
        }
コード例 #26
0
ファイル: TasksController.cs プロジェクト: tntwist/aidremind
        public async Task <ActionResult <EFRepo.Entities.Task> > PostTask(EFRepo.Entities.Task task)
        {
            _context.Tasks.Add(task);
            await _context.SaveChangesAsync();

            var createdAtAction = CreatedAtAction("GetTask", new { id = task.TaskId }, task);

            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            var taskJSON = JsonConvert.SerializeObject(task, new JsonSerializerSettings
            {
                ContractResolver  = contractResolver,
                Formatting        = Formatting.Indented,
                NullValueHandling = NullValueHandling.Ignore
            });

            await SendTaskCreatedEventToAMQP(createdAtAction, taskJSON);

            return(createdAtAction);
        }
コード例 #27
0
        public void CustomOverrideCreator()
        {
            var resolver = new DefaultContractResolver();
            var contract = (JsonObjectContract)resolver.ResolveContract(typeof(MultipleParametrizedConstructorsJsonConstructor));

            bool ensureCustomCreatorCalled = false;

            contract.OverrideCreator = args =>
            {
                ensureCustomCreatorCalled = true;
                return(new MultipleParametrizedConstructorsJsonConstructor((string)args[0], (int)args[1]));
            };
            Assert.IsNotNull(contract.OverrideCreator);

            var o = JsonConvert.DeserializeObject <MultipleParametrizedConstructorsJsonConstructor>("{Value:'value!', Age:1}", new JsonSerializerSettings
            {
                ContractResolver = resolver
            });

            Assert.AreEqual("value!", o.Value);
            Assert.AreEqual(1, o.Age);
            Assert.IsTrue(ensureCustomCreatorCalled);
        }
コード例 #28
0
        public void ReplacePropertyValue_ForExpandoObject_WithCustomNamingStrategy()
        {
            // Arrange
            var contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new TestNamingStrategy()
            };

            dynamic targetObject = new ExpandoObject();

            targetObject.customTest = 1;

            var patchDocument = new JsonPatchDocument();

            patchDocument.Replace("Test", 2);
            patchDocument.ContractResolver = contractResolver;

            // Act
            patchDocument.ApplyTo(targetObject);

            // Assert
            Assert.Equal(2, targetObject.customTest);
        }
コード例 #29
0
        public void AbstractTestClass()
        {
            var resolver = new DefaultContractResolver();
            var contract = (JsonObjectContract)resolver.ResolveContract(typeof(AbstractTestClass));

            Assert.IsFalse(contract.IsInstantiable);
            Assert.IsNull(contract.DefaultCreator);
            Assert.IsNull(contract.OverrideCreator);

            ExceptionAssert.Throws <JsonSerializationException>(() => JsonConvert.DeserializeObject <AbstractTestClass>(@"{Value:'Value!'}", new JsonSerializerSettings
            {
                ContractResolver = resolver
            }), "Could not create an instance of type Newtonsoft.Json.Tests.Serialization.AbstractTestClass. Type is an interface or abstract class and cannot be instantiated. Path 'Value', line 1, position 7.");

            contract.DefaultCreator = () => new AbstractImplementationTestClass();

            var o = JsonConvert.DeserializeObject <AbstractTestClass>(@"{Value:'Value!'}", new JsonSerializerSettings
            {
                ContractResolver = resolver
            });

            Assert.AreEqual("Value!", o.Value);
        }
コード例 #30
0
ファイル: ListAdapterTest.cs プロジェクト: wserr/AspNetCore
        public void Add_WithIndexSameAsNumberOfElements_Works()
        {
            // Arrange
            var resolver     = new DefaultContractResolver();
            var targetObject = new List <string>()
            {
                "James", "Mike"
            };
            var listAdapter = new ListAdapter();
            var position    = targetObject.Count.ToString(CultureInfo.InvariantCulture);

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, position, resolver, "Rob", out var message);

            // Assert
            Assert.Null(message);
            Assert.True(addStatus);
            Assert.Equal(3, targetObject.Count);
            Assert.Equal(new List <string>()
            {
                "James", "Mike", "Rob"
            }, targetObject);
        }
コード例 #31
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            DefaultContractResolver resolver = serializer.ContractResolver as DefaultContractResolver;

            Type t = value.GetType();

            object result   = FSharpUtils.GetUnionFields(null, value, t, null);
            object info     = FSharpUtils.GetUnionCaseInfo(result);
            object fields   = FSharpUtils.GetUnionCaseFields(result);
            object caseName = FSharpUtils.GetUnionCaseInfoName(info);

            object[] fieldsAsArray = fields as object[];

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(CasePropertyName) : CasePropertyName);
            writer.WriteValue((string)caseName);
            if (fieldsAsArray != null && fieldsAsArray.Length > 0)
            {
                writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(FieldsPropertyName) : FieldsPropertyName);
                serializer.Serialize(writer, fields);
            }
            writer.WriteEndObject();
        }
コード例 #32
0
        public void Orderby_RespectsConfiguredNamingStrategy(DefaultContractResolver contractResolver)
        {
            using (WithContractResolver(contractResolver))
            {
                SpawnData(data);

                var namingStrategy = contractResolver.NamingStrategy ?? new DefaultNamingStrategy();

                var expected = RethinkDB.R.Table(TableName)
                               .OrderBy(namingStrategy.GetPropertyName(nameof(TestObject.SimpleProperty), false));

                var queryable = GetQueryable <TestObject>(TableName, expected);

                var result =
                    (
                        from testObject in queryable
                        orderby testObject.SimpleProperty
                        select testObject
                    ).ToList();

                Assert.NotNull(result);
            }
        }
コード例 #33
0
        public void WhenSerializationErrorDetectedBySerializer_ThenCallbackIsCalled()
        {
            // Verify contract is properly finding our callback
            var resolver = new DefaultContractResolver().ResolveContract(typeof(FooEvent));

#pragma warning disable 612,618
            Debug.Assert(resolver.OnError != null);
            Debug.Assert(resolver.OnError == typeof(FooEvent).GetMethod("OnError", BindingFlags.Instance | BindingFlags.NonPublic));
#pragma warning restore 612,618

            var serializer = JsonSerializer.Create(new JsonSerializerSettings
            {
                // If I don't specify Error here, the callback isn't called
                // either, but no exception is thrown.
                MissingMemberHandling = MissingMemberHandling.Error,
            });

            // This throws with missing member exception, rather than calling my callback.
            var foo = serializer.Deserialize <FooEvent>(new JsonTextReader(new StringReader("{ Id: 25 }")));

            // When fixed, this would pass.
            Debug.Assert(foo.Identifier == 25);
        }
コード例 #34
0
    public void SerializeCompilerGeneratedMembers()
    {
      StructTest structTest = new StructTest
        {
          IntField = 1,
          IntProperty = 2,
          StringField = "Field",
          StringProperty = "Property"
        };

      DefaultContractResolver skipCompilerGeneratedResolver = new DefaultContractResolver
      {
        DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
      };

      string skipCompilerGeneratedJson = JsonConvert.SerializeObject(structTest, Formatting.Indented,
        new JsonSerializerSettings { ContractResolver = skipCompilerGeneratedResolver });

      Assert.AreEqual(@"{
  ""StringField"": ""Field"",
  ""IntField"": 1,
  ""StringProperty"": ""Property"",
  ""IntProperty"": 2
}", skipCompilerGeneratedJson);

      DefaultContractResolver includeCompilerGeneratedResolver = new DefaultContractResolver
      {
        DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,
        SerializeCompilerGeneratedMembers = true
      };

      string includeCompilerGeneratedJson = JsonConvert.SerializeObject(structTest, Formatting.Indented,
        new JsonSerializerSettings { ContractResolver = includeCompilerGeneratedResolver });

      Assert.AreEqual(@"{
  ""StringField"": ""Field"",
  ""IntField"": 1,
  ""<StringProperty>k__BackingField"": ""Property"",
  ""<IntProperty>k__BackingField"": 2,
  ""StringProperty"": ""Property"",
  ""IntProperty"": 2
}", includeCompilerGeneratedJson);
    }
コード例 #35
0
    public void WhenSerializationErrorDetectedBySerializer_ThenCallbackIsCalled()
    {
      // Verify contract is properly finding our callback
      var resolver = new DefaultContractResolver().ResolveContract(typeof(FooEvent));

      Debug.Assert(resolver.OnError != null);
      Debug.Assert(resolver.OnError == typeof(FooEvent).GetMethod("OnError", BindingFlags.Instance | BindingFlags.NonPublic));

      var serializer = JsonSerializer.Create(new JsonSerializerSettings
      {
        // If I don't specify Error here, the callback isn't called
        // either, but no exception is thrown.
        MissingMemberHandling = MissingMemberHandling.Error,
      });

      // This throws with missing member exception, rather than calling my callback.
      var foo = serializer.Deserialize<FooEvent>(new JsonTextReader(new StringReader("{ Id: 25 }")));

      // When fixed, this would pass.
      Debug.Assert(foo.Identifier == 25);
    }