2017-08-25 52 views
0

請使用JavaScriptSerializer從Json輸出中檢查。然後檢查我使用json2csharp.com創建的類助手。問題在於控制器。根據我所需的Jason,我沒有得到正確的輸出結果。我在控制器中正確嗎?問題出在哪裏?請問問你是否想知道一些具體的東西,對不起,很難形容得更清楚。從c#獲得正確的json輸出類

助手類代碼:

public class ItemsFromFile 
    { 
     public string ASIN { get; set; } 
     public string Title { get; set; } 
     public List<Product> products { get; set; } 

    } 

    public class ItemsDeatails 
    { 
     public List<ItemsFromFile> ItemsFromFile { get; set; } 
    } 

    public class File 
    { 
     public string nameLocator { get; set; } 
     public ItemsDeatails itemsDeatails { get; set; } 
    } 

    public class RootObject 
    { 
     public string Token { get; set; } 
     public File file { get; set; } 
    } 

控制器代碼:

if (type == "Salefreaks") 
       { 
      var token = ctx.BulkStores.FirstOrDefault(x => x.StoreName == store && x.Type == 1).Token; 

      var ItemsFromFile = new ItemsFromFile() 
        { 
         products = new List<Product>() 
        }; 

        var ItemsDeatails = new ItemsDeatails() 
        { 

        }; 

        var File = new File() 
        { 
         nameLocator = "testimport1" 
        }; 

        var RootObject = new RootObject() 
        { 
         Token = token 
        }; 

      var singleItems = ctx.BulkScannedItems.Where(x => x.UserSellerScanRequestId == id).ToList(); 

        foreach (var item in singleItems) 
        { 
         ItemsFromFile.products.Add(new Product { ASIN = item.ASIN, Title = item.EbayTitle }); 
        } 

        var json = new JavaScriptSerializer().Serialize(RootObject); 
     } 

必需的JSON輸出代碼:

{ 
    "Token": "7f3099b0-36b1", 
    "file": { 
    "nameLocator": "testimport1", 
    "itemsDeatails": { 
     "ItemsFromFile": [ 
     { 
     "ASIN": "B011KVFT9Y", 
     "Title": "Disney Batman Durable Party Beach Outdoor Adventure Camp Chair w/ Storage Bag" 
     }, 
     { 
     "ASIN": "B01D4KRBW2", 
     "Title": "High Quality Diy Oil Painting Paint Number Kit Theme-Romantic Street A Frameless" 
     } 
     ] 
    } 
    } 
} 
+0

我沒有看到任何地方,你設置根對象上的文件屬性......還可以看出你有沒有分配細節File對象,也不是ItemsFromFile的詳細信息對象。 – Trioj

+0

你可以簡單地使用'Json'方法。 '返回Json(rootObject);' – Shyju

回答

1

確保所有對象進行適當分配。

var token = ctx.BulkStores.FirstOrDefault(x => x.StoreName == store && x.Type == 1).Token; 

var RootObject = new RootObject() { 
    Token = token, 
    file = new File() { 
     nameLocator = "testimport1", 
     itemsDeatails = new ItemsDeatails() { 
      ItemsFromFile = new List<ItemsFromFile>() 
     } 
    } 
}; 

var itemsFromFile = new ItemsFromFile(); 
itemsFromFile.products = new List<Product>(); 

var singleItems = ctx.BulkScannedItems.Where(x => x.UserSellerScanRequestId == id).ToList(); 

foreach (var item in singleItems) { 
    itemsFromFile.products.Add(new Product { ASIN = item.ASIN, Title = item.EbayTitle }); 
} 

RootObject.file.itemsDeatails.ItemsFromFile.Add(itemsFromFile); 

var json = new JavaScriptSerializer().Serialize(RootObject); 

這就是說,看起來你並不需要ItemsFromFile類中的產品列表。這個定義可能更有意義:

public class ItemsFromFile { 
    public string ASIN { get; set; } 
    public string Title { get; set; } 
} 

那麼你的代碼將是這樣的:

var token = ctx.BulkStores.FirstOrDefault(x => x.StoreName == store && x.Type == 1).Token; 

var RootObject = new RootObject() { 
    Token = token, 
    file = new File() { 
     nameLocator = "testimport1", 
     itemsDeatails = new ItemsDeatails() { 
      ItemsFromFile = new List<ItemsFromFile>() 
     } 
    } 
}; 

var singleItems = ctx.BulkScannedItems.Where(x => x.UserSellerScanRequestId == id).ToList(); 

foreach (var item in singleItems) { 
    RootObject.file.itemsDeatails.ItemsFromFile.Add(new ItemsFromFile { ASIN = item.ASIN, Title = item.EbayTitle }); 
} 
1

您可以在構造函數中的代碼初始化內部對象也是如此。

public class RootObject 
    { 
     public string Token { get; set; } 
     public File file { get; set; } 
    } 

    public class File 
    { 
     public File() 
     { 
      this.itemsDeatails = new ItemsDeatails(); 
     } 
     public string nameLocator { get; set; } 
     public ItemsDeatails itemsDeatails { get; set; } 
    } 

    public class ItemsDeatails 
    { 
     public ItemsDeatails(){ 
     this.ItemsFromFile = new List<ItemsFromFile>(); 
     } 
     public List<ItemsFromFile> ItemsFromFile { get; set; } 
    } 

    public class ItemsFromFile 
    { 
     public ItemsFromFile(){ 
     this.products = new List<Product>(); 
     } 

     public List<Product> products { get; set; } 

    } 

    public class Product { 
     public string ASIN { get; set; } 
     public string Title { get; set; } 
    } 

正確初始化您的項目。並從頭開始創建Root Object。 先填充內部類,然後填入內部類。

var itemDetails = new ItemsDeatails(); 

    itemDetails.ItemsFromFile = new ItemsFromFile(); 
    var singleItems = ctx.BulkScannedItems.Where(x => x.UserSellerScanRequestId == id).ToList(); 

    foreach (var item in singleItems) 
      { 
       itemDetails.ItemsFromFile.products.Add(new Product { ASIN = item.ASIN, Title = item.EbayTitle }); 
      } 

    var fl = new File(){ 
     nameLocator = "testimport1", 
     itemsDeatails = itemDetails 
    } 

    var token = ctx.BulkStores.FirstOrDefault(x => x.StoreName == store && x.Type == 1).Token; 

    var root = new RootObject() 
    { 
     Token = token, 
     file = fl 
    } 

    var json = new JavaScriptSerializer().Serialize(root);