2016-01-07 41 views
0

数据所需的JSON数组我有两个tables在我的数据库StoresProducts具有以下字段创建一个从通用的清单

TBL_Store

StoreID (Primary Key) 
StoreName 

TBL_PRODUCT

ProductID (Primary Key) 
StoreID (Foreign Key) 
ProductName 
INT_TYPE 

我正在使用以下查询创建JSON阵列

var data = context.tbl_product.Where(x => x.INT_TYPE == 1).ToList();      
      var json = JsonConvert.SerializeObject(data, Formatting.Indented, 
         new JsonSerializerSettings() { 
          ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
         }); 

它给了我所有的关系表中的数据与Repeated Entries。 我希望我的JSON来是这样的

[{ 
"Store": { 
    "storeid": "1", 
    "storename": "Nike", 
    "Products": [{ 
     "ProdID": "1", 
     "prodName": "NikeShoes1" 
    }, { 
     "ProdID": "2", 
     "prodName": "NikeShoes2" 
    }, { 
     "ProdID": "3", 
     "prodName": "NikeShoes3" 
    }] 
}, 
"Store": { 
    "storeid": "2", 
    "storename": "Biba", 
    "Products": [{ 
     "ProdID": "1", 
     "prodName": "Biba1" 
    }, { 
     "ProdID": "2", 
     "prodName": "Biba2" 
    }, { 
     "ProdID": "3", 
     "prodName": "Biba3" 
    }] 
} 
    }] 

回答

1

假设你有一个Store导航属性在tbl_product

创建辅助类:

[JsonObject(MemberSerialization.OptIn)] 
public class Product 
{ 
    [JsonProperty("prodName")] 
    public string ProductName {get;set;} 

    [JsonProperty("ProdID")] 
    public int ProductId {get;set;} 
} 

[JsonObject(MemberSerialization.OptIn)] 
public class Store 
{ 
    [JsonProperty("storeid")] 
    public string StoreId { get; set; } 

    [JsonProperty("storename")] 
    public string StoreName { get; set; } 

    [JsonProperty("Products")] 
    public IList<Product> Products { get; set; } 
} 

获得需要的格式的数据(通知包含方法将禁用延迟加载到商店对象):

var data = context.tbl_product.Where(x => x.INT_TYPE == 1).Include(x=>x.Store).ToList(); 

var stores = from d in data 
      group d by new {d.StoreID, d.StoreName} into stores 
      select new Store{ 
       StoreId = stores.Key.StoreID, 
       StoreName = stores.Key.StoreName, 
       Products = stores.Select(s=>new Product{ ProductId = s.ProductID, ProductName = s.ProductName }).ToList() 
      }; 

然后你可以使用你的商店对象的序列化:

var json = JsonConvert.SerializeObject(stores , Formatting.Indented, 
         new JsonSerializerSettings() { 
          ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
         });