2016-01-07 40 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 
         });