【发布时间】:2017-09-27 14:30:01
【问题描述】:
我在将 javascript 数组反序列化为 c# List 类时遇到问题,已阅读有关 SO 的其他答案,但没有解决我的问题。
对象数组
"{\"Id\":\"87\",\"Name\":\"Product x\",\"Cost\":200000,\"Tag\":\"Product_x\"},
{\"Id\":\"88\",\"Name\":\"Product y\",\"Cost\":100000,\"Tag\":\"Product_y\"}"
产品以 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 返回一个像这样的对象数组
"[{\"Id\":\"87\",\"Name\":\"Product x\",\"Cost\":200000,\"Tag\":\"Product_x\"},
{\"Id\":\"88\",\"Name\":\"Product y\",\"Cost\":100000,\"Tag\":\"Product_y\"}]"
我需要帮助。谢谢!
更新
Javascript 帖子
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 帖子
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);
}
});
【问题讨论】:
-
“对象数组”不是一个,JSON 无效。要成为一个数组,它将在
[...]内(在最后的示例中)。因此,如果您真的没有收到它,请添加方括号。 -
谢谢@T.J.克劳德,这也是我所怀疑的。我该如何解决。我已经更新了我的问题以包括已发布的表格。你能帮忙吗?
-
看起来克莱顿已经解决了。 :-)
-
哦,是的,伟大的先生。也感谢您指出实际问题。
-
建议您也参考this answer。将您的数据字符串化并将其作为 FormData 进行传感,然后在模型属性中再次反序列化它是不必要的..
标签: javascript c# asp.net-mvc deserialization form-data