在 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;
}
我在将 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;
}