我正在制作我的第一个使用关系的简单项目,一个非常简单的清单应用程序。我正在尝试使用title保存ItemList,它包含一组项目(项目名称和项目数量),我正在使用不同的模型。当我尝试从我的表单发布时,我收到以下模型状态错误:
无法将当前JSON数组(例如[1,2,3])反序列化为类型 'BringIt.Models.Item',因为该类型需要一个JSON对象(例如 {“name”:“value”})正确反序列化。 要修复此错误 将JSON更改为JSON对象(例如{“name”:“value”})或更改 反序列化类型为数组或实现集合的类型 接口(例如ICollection,IList)就像List一样 从JSON数组反序列化。也可以添加JsonArrayAttribute 到类型强制它从JSON数组反序列化。 ↵Path 'item',第1行,第46位。“姓名
我尝试更改VM和模型中的类型,但无法通过此错误。这是我现有的代码:
型号:
namespace BringIt.Models {
public class ItemList {
public int Id { get; set; }
public string Title { get; set; }
public DateTime EventDate { get; set; }
public ICollection<Item> Items { get; set; }
}
}
namespace BringIt.Models {
public class Item {
public int Id { get; set; }
public string ItemName { get; set; }
public int ItemQty { get; set; }
public string Person { get; set; }
public ItemList ItemList { get; set; }
}
}
我的虚拟机
namespace BringIt.ViewModels {
public class AddItemsVM {
public Item item { get; set; }
public ItemList itemList { get; set; }
}
}
客户端控制器
export class CreateItemListController {
public itemList = null;
public item;
public items = [];
public addNew() {
var item = {};
this.items.push(item);
}
public save() {
this.itemListService.save(this.itemList, this.items).then(() => { this.$location.path('/') });
}
constructor(
private itemListService: MyApp.Services.ItemListService,
private $location: angular.ILocationService
) {
服务器端控制器
namespace BringIt.API
{
public class ItemListController : ApiController {
private IEFRepository _repo;
public ItemListController(IEFRepository repo) {
this._repo = repo;
}
public IHttpActionResult Post(AddItemsVM data) {
if (!ModelState.IsValid) {
return BadRequest(this.ModelState);
}
var itemList = data.itemList;
var item = data.item;
_repo.SaveItem(itemList, item);
return Created("", itemList);
}
}
}
回购
public void SaveItem(ItemList listToSave, Item items) {
if (listToSave.Id == 0) {
listToSave.EventDate = DateTime.Now;
_db.ItemLists.Add(listToSave);
_db.Items.Add(items);
_db.SaveChanges();
} else {
var original = _db.ItemLists.Find(listToSave.Id);
original.Title = listToSave.Title;
original.EventDate = listToSave.EventDate;
original.Items = listToSave.Items;
_db.SaveChanges();
}
}
}
客户端服务 名称空间MyApp.Services {
export class ItemListService {
private ItemListResource;
public save(itemList, items) {
debugger;
var data: any = {}
data.itemList = itemList;
data.item = items;
return this.ItemListResource.save(data).$promise;
}
constructor($resource: angular.resource.IResourceService) {
this.ItemListResource = $resource('/api/itemList/:id');
}
}
angular.module('MyApp')。service('itemListService',ItemListService);
感谢您的帮助。我已经在这里工作了太多时间而且无法破解它。
答案 0 :(得分:1)
从客户端,您将发送一条JSON消息,如:
{
"itemList": {},
"item": [{blah}, {blah}... ]
}
其中item
是JSON数组。
您的C#视图模型没有可枚举的item
属性。反序列化器无法将项数组分配给不可枚举的属性。您收到的错误消息准确无误,但如果您不熟悉术语,则会有点混乱!
我可能会建议您从问题中删除一些数据库代码,因为这完全不同。