在 C# 中反序列化 javascript 对象数组的问题

Issue deserializing an array of javascript object in c#

我在将 javascript 数组反序列化为 c# List class 时遇到问题,已阅读有关 SO 的其他答案,但没有解决我的问题。

对象数组

"{\"Id\":\"87\",\"Name\":\"Product x\",\"Cost\":200000,\"Tag\":\"Product_x\"},
 {\"Id\":\"88\",\"Name\":\"Product y\",\"Cost\":100000,\"Tag\":\"Product_y\"}"

产品被post编辑为 FormData,因此我以上述格式收到它们。

产品型号

public class Product {
    public int Id {get; set;}
    public String Name {get; set;}
    public decimal Cost {get; set;}
    public string Tag {get; set;}
 }

我有一个 ViewModel

public class ProductViewModel {
    [JsonProperty("SerializedProducts")]
        public string SerializedProducts{ get; set; } // So this model returns the array of objects above

    // Deserializes the SerializedProduct and converts to List of Products.
        public List<Product> Products
        {
            get { return JsonConvert.DeserializeObject<List<Product>>(SerializedProducts); } 
            set { }
        }
 }

错误信息 无法将当前 JSON 对象(例如 {\"name\":\"value\"})反序列化为类型 'System.Collections.Generic.List `1[Product]',因为该类型需要一个 JSON 数组(例如 [1 ,2,3]) 正确反序列化。

我观察到的 我希望 SerializedProducts return 像这样的对象数组

"[{\"Id\":\"87\",\"Name\":\"Product x\",\"Cost\":200000,\"Tag\":\"Product_x\"},
 {\"Id\":\"88\",\"Name\":\"Product y\",\"Cost\":100000,\"Tag\":\"Product_y\"}]"

拜托,我需要帮助。谢谢!

更新

Javascript post

function extractAndFormatFormData(formId) {
    var formData = new FormData();
    var products = [];
    var product = new Product(Id, Name, Cost, Tag);

    // Add product to array
    products.push(JSON.stringify(product));

    // Add products to form
    formData.append('SerializedProducts', products);

    // I'm also attaching a txt file. This is not an issue at the moment
    formData.append('UploadedForm', uploadedFile);

    return formData;
}

Ajax post

var formatedFormData = extractAndFormatFormData(formId);
        var url = '/Dashboard/provision/';
        $.ajax({
            url: url,
            data: formatedFormData,
            type: 'POST',
            datatype: 'json',
            contentType: false,
            processData: false,
            cache: false,
            success: function (data) {
                $('#planDetails').append(data);
            },
            error: function (err) {
                console.log(err);
            }
        });

在 Javascript 中,对 products 数组而不是数组项使用 stringfy。

代码:

function extractAndFormatFormData(formId) {
    var formData = new FormData();
    var products = [];
    var product = new Product(Id, Name, Cost, Tag);

    // Add product to array
    products.push(product);

    // Add products to form
    formData.append('SerializedProducts', JSON.stringify(products));

    // I'm also attaching a txt file. This is not an issue at the moment
    formData.append('UploadedForm', uploadedFile);

    return formData;
}