日期:2014-05-20  浏览次数:21017 次

最近做转json,发现linq搜出来的内部类是实现了IEnumerable接口的……为何呢……

var result = (from p in query
              join g in db.Inventory on new { SkuId = Convert.ToInt32(p.EbayOnlineProduct.SkuID), Wid = Convert.ToInt32(p.EbayOnlineProduct.WHID) }
              equals new { SkuId = g.SKUId, Wid = g.WarehouseId } into pg
              from inv in pg.DefaultIfEmpty()
              select new
                  {
                      Id = p.Id,
                      Img = p.EbayOnlineProduct.EbayImgPath,
                      OurData = new
                      {
                          Title = p.EbayOnlineProduct.OnlineProductTitle,
                          Sku = p.EbayOnlineProduct.SKU
                      },
                      PurchasePrice = inv.NewPurchasePrice,
                      CptrImg = p.Product_Competitor.CPTR_SKUImg,
                      CptrData = new
                      {
                          Title = p.Product_Competitor.CPTR_Title,
                          eBayId = p.Product_Competitor.eBayID,
                          ItemId = p.CptrItemId
                      },
                      CptrOldPrice = p.CptrOldPrice,
                      CptrNewPrice = p.CptrNewPrice,
                      CptrDiffPrice = p.CptrDiffPrice,
                      Oname = inv.SKU.Sys_operators.oname,
                      Supplier = inv.SKU.supplier.sname,
                      ModifyDate = p.ModifyDate
                  }).Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList();

例如上述语句,OurData里的Title是实现了IEnumerable接口的,导致自定义的转json方法误以为是集合从而调用了错误的方法……结果现在对是否集合的判断要写成这样:

if (
    Array.IndexOf(pi.PropertyType.GetInterfaces(), typeof(IEnumerable)) > -1 &&
    pi.PropertyType.IsGenericType && 
    !pi.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))
    )

请问有没有更好的写法?
------解决方案--------------------
引用:
为什么要自定义转Json呢??用Newtonsoft.Json不是很好么???实在不行微软也提供了两种转Json的方法啊

现在这个项目前后端只用json交互,MS的方法会遇到特殊字符截断json的问题,而且有个自定义显示列的需求,前端给的要求是如果页面不显示的那么就别放到json里面了。由于之前有很多接口已经写死,所以我们做的方法里还要根据每个用户的自定义设置来过滤掉这些不显示的字段。而且以后还有当中某些字段要加密的问题,所以要自己写个方法来实现……
------解决方案--------------------
引用:
现在这个项目前后端只用json交互,MS的方法会遇到特殊字符截断json的问题,而且有个自定义显示列的需求,前端给的要求是如果页面不显示的那么就别放到json里面了。…


举出例子说明什么“特殊字符截断”问题?要是说你们自己写的有这类问题我还能相信。