繁体   English   中英

从c#类获取正确的json输出

[英]get correct json output from c# class

请从我想要使用JavaScriptSerializer的Json输出中检查。 然后检查我使用json2csharp.com创建的类帮助器。 问题出在控制器上。 根据所需的Jason,我没有得到正确的输出。 我在控制器上做得正确吗? 问题出在哪里? 如果您想知道一些特定的问题,请提出问题,对不起,很难更清楚地描述它。

助手类代码:

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"
       }
      ]
    }
  }
}

确保正确分配了所有对象。

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 });
}

您也可以在构造函数中的代码中初始化内部对象。

   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; }
    }

正确初始化您的项目。 并从头开始创建根对象。 首先填充内部类,然后填充内部类。

   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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM