zoukankan      html  css  js  c++  java
  • 如何更改Json.NET的序列化规则

    我想要使序列化出来的JSON都是小写,可以通过建立 LowercaseContractResolver:DefaultContractResolver

    来实现, 创建Custom ContractResolver可以对很多东西进行更改,可以自定义规则。。。 如果你只要针对某个的话,可以用 JsonProperty 或者使用CustomJsonConverter: JsonConverter。。

    改变规则:

    http://stackoverflow.com/questions/6288660/net-ensuring-json-keys-are-lowercase

    http://stackoverflow.com/questions/12501805/how-to-set-json-net-contractserializer-for-a-certain-specific-type-instead-of-gl

    http://stackoverflow.com/questions/25183710/serialize-json-property-name

    CustomJsonConverter:

    http://blog.maskalik.com/asp-net/json-net-implement-custom-serialization/

    DATE TIME: http://cgeers.com/2011/09/25/writing-a-custom-json-net-datetime-converter/

    You can create a custom contract resolver for this. The following contract resolver will convert all keys to lowercase:

    public class LowercaseContractResolver : DefaultContractResolver
    {
        protected override string ResolvePropertyName(string propertyName)
        {
            return propertyName.ToLower();
        }
    }

    Usage:

    var settings = new JsonSerializerSettings();
    settings.ContractResolver = new LowercaseContractResolver();
    var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);

    Wil result in:

    {"username":"Mark","apitoken":"xyzABC1234"}

    If you always want to serialize using the LowercaseContractResolver, consider wrapping it in a class to avoid repeating yourself:

    public class LowercaseJsonSerializer
    {
        private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            ContractResolver = new LowercaseContractResolver()
        };
    
        public static string SerializeObject(object o)
        {
            return JsonConvert.SerializeObject(o, Formatting.Indented, Settings);
        }
    
        public class LowercaseContractResolver : DefaultContractResolver
        {
            protected override string ResolvePropertyName(string propertyName)
            {
                return propertyName.ToLower();
            }
        }
    }

    Which can be used like this:

    var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" });
    // { "foo": "bar" }

    ASP.NET MVC4 / WebAPI

    If you are using ASP.NET MVC4 / WebAPI, you can use a CamelCasePropertyNamesContractResolverfrom Newtonsoft.Json library which included by default.

  • 相关阅读:
    算法
    UVA 10318 Security Panel(DFS剪枝 + 状压 + 思维)题解
    CodeForces 509C Sums of Digits(贪心乱搞)题解
    UVA 10382 Watering Grass(区间覆盖,贪心)题解
    CodeForces 430A Points and Segments (easy)(构造)题解
    CodeForces 459C Pashmak and Buses(构造)题解
    newcoder F石头剪刀布(DFS + 思维)题解
    newcoder H肥猪(单调队列 / 线段树)题解
    UVALive 7501 Business Cycle(二分)题解
    UVALive 7503 Change(乱搞)题解
  • 原文地址:https://www.cnblogs.com/handboy/p/3965118.html
Copyright © 2011-2022 走看看