摘要: Asp.Net跨平台的文章园子里有很多,这里给自己搭建的情况做一下总结,方便以后查看。 参考网站: http://www.linuxdot.net/(Linux DotNET大本营) http://www.cnblogs.com/shanyou/p/4677569.h... 阅读全文
posted @ 2015-11-15 14:49 weixiao520 阅读(4053) 评论(12) 推荐(21) 编辑

一,前言

  最近做项目采用Json形式和其他客户端交互,借助于Newtonsoft.Json 。

  由于业务场景不同,输出的Json内容也不同。要想忽略的属性,可以借助Newtonsoft.Json的特性,在实体前面添加特性[JsonIgnore]即可,但有时候会根据业务需求,在不同的地方输出同一个实体中不同的属性,所以添加特性的方式显然不能满足要求。例如user表,在A场景下需要password;B场景下不需要。

二,解决办法

  可以重写Newtonsoft.Json的DefaultContractResolver类。

  步骤一:继承DefaultContractResolver

  新建类继承Newtonsoft.Json的类 DefaultContractResolver,重写CreateProperties方法,代码如下:

public class JsonPropertyContractResolver : DefaultContractResolver
    {
        IEnumerable<string> lstInclude;
        public JsonPropertyContractResolver(IEnumerable<string> includeProperties)
        {

            lstInclude = includeProperties;
        }

        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {

            return base.CreateProperties(type, memberSerialization).ToList().FindAll(p => lstInclude.Contains(p.PropertyName));//需要输出的属性  } }
        }
    }

 

  步骤二:使用方法

  假设我们需要转化为Json的实体列表是Product,场景一,这个列表中的Price属性不需要转成Json到前端;场景二,这个列表中的ShopID和Count属性不需要转成Json到前端。代码如下:

List<Product> ProductList = new List<Product>
                                                {
                                                    new Product
                                                    {
                                                        ShopID = 1,
                                                        Price=10,
                                                        Count=4,
                                                        Name = "商品一"
                                                    },
                                                    new Product
                                                    {
                                                        ShopID = 2,
                                                         Price=11,
                                                        Count=3,
                                                        Name = "商品二"
                                                    },
                                                    new Product
                                                    {
                                                        ShopID = 1,
                                                         Price=12,
                                                        Count=1,
                                                        Name = "商品三"
                                                    },
                                                    new Product
                                                    {
                                                        ShopID = 2,
                                                         Price=17,
                                                        Count=10,
                                                        Name = "商品四"
                                                    },
                                                    new Product
                                                    {
                                                        ShopID = 3,
                                                        Price=13,
                                                        Count=2,
                                                        Name = "商品五"
                                                    }
                                                };

            //场景一
            string jsonString = JsonConvert.SerializeObject(ProductList, Formatting.Indented, new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                ContractResolver = new JsonPropertyContractResolver(new List<string> { "ShopID", "Name", "Count" })
            });
            Console.WriteLine("场景一:" + jsonString);

            //场景二
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.Formatting = Formatting.Indented;
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            settings.ContractResolver = new JsonPropertyContractResolver(new List<string> { "Name", "Price" });
            Console.WriteLine("场景二:" + JsonConvert.SerializeObject(ProductList, settings));

  输出结果:

 

posted @ 2017-07-09 22:50 weixiao520 阅读(6842) 评论(7) 推荐(6) 编辑
摘要: 一、DLL安装 用NuGet搜索StackExchange.Redis,然后下载就可以。 ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放 阅读全文
posted @ 2016-08-12 16:05 weixiao520 阅读(3988) 评论(3) 推荐(4) 编辑
摘要: 一、新建页面 二、获取父级元素 1、 parent([expr]): 获取指定元素的所有父级元素 代码如下: $("li.third-item").parent().css('background-color', 'aqua'); 效果如下: 2、parents() 获得当前匹配元素集合中每个元素的 阅读全文
posted @ 2016-07-11 22:38 weixiao520 阅读(75543) 评论(1) 推荐(7) 编辑
摘要: 一、使用多线程的几种方式 不需要传递参数,也不需要返回参数 ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值。 class Program { static void Main(string[] args) { for (int i = 0; 阅读全文
posted @ 2016-06-05 17:43 weixiao520 阅读(1281) 评论(2) 推荐(6) 编辑
点击右上角即可分享
微信分享提示