gpt4 book ai didi

c# - 如何发布对象列表?

转载 作者:行者123 更新时间:2023-11-30 17:39:05 24 4
gpt4 key购买 nike

我正在制作我的第一个使用关系的简单项目,这是一个非常简单的 list 应用程序。我正在尝试保存带有标题的 ItemList,它包含我正在使用不同模型的项目集合(项目名称和项目数量)。当我尝试从我的表单发帖时,出现以下模型状态错误:

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'BringIt.Models.Item' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. ↵Path 'item', line 1, position 46." Name

我已尝试更改我的 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; }
}
}

客户端 Controller

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

服务器端 Controller

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

repo

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

感谢大家的帮助。我已经在这上面待了太多个小时了,就是无法破解它。

最佳答案

您将从客户端发送一条 JSON 消息,例如:

{
"itemList": {},
"item": [{blah}, {blah}... ]
}

其中 item 是一个 JSON 数组。

您的 C# View 模型没有可枚举的 item 属性。反序列化器无法将项目数组分配给不可枚举的属性。您收到的错误消息是准确的,但如果您不习惯这些术语,就会有点困惑!

我可能会建议您从问题中删除一些数据库代码,因为那完全是另一回事。

关于c# - 如何发布对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com