ExtJs / .Net - Ошибка преобразования пакетных данных Json в тип .Net - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть приложение .Net mvc с интерфейсом ExtJS.Я пытаюсь обновить несколько записей из сетки.Записи передаются как модель с прокси Ext.Direct, который соответствует этому типу .Net:

public class AgreementType
{
    public int AgreementTypeId { get; set; }
    public string Value { get; set; }
    public bool IsDeleted { get; set; }
}

Это метод, который я передаю:

public ActionResult UpdateAgreementType(AgreementType at)
    {
        return Json(new
        {
            success = _vendorRepo.UpdateAgreementType(at)
        });
    }

И вот полезная нагрузка запроса:

{"action":"Main","method":"UpdateAgreementType","data":[[{"AgreementTypeId":10,"Value":"Spot PO","IsDeleted":false},{"AgreementTypeId":11,"Value":"PROCARD-test","IsDeleted":false}]],"type":"rpc","tid":12}

Я получаю эту ошибку:

Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Project.Model.AgreementType ', потому что тип требует JSON-объекта (например, {"name": "value"}) для правильной десериализации.Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List, который можетбыть десериализованным из массива JSON.JsonArrayAttribute также может быть добавлен к типу, чтобы принудительно десериализовать его из массива JSON.Путь '', строка 1, позиция 1.

Когда я пытаюсь передать одну запись, она корректно интерпретирует данные в мой тип и успешно обновляется.РЕДАКТИРОВАТЬ: Вот полезная нагрузка для этого:

{"action":"Main","method":"UpdateAgreementType","data":[{"AgreementTypeId":11,"Value":"PROCARD-test","IsDeleted":false}],"type":"rpc","tid":12}

Я немного нуб с JSON, но я понимаю, что что-то не так с форматом данных.Я попытался передать значения явно, а не только модель, но это не сработало.Есть предложения?

1 Ответ

0 голосов
/ 21 декабря 2018

У вас не просто AggreementType, у вас гораздо более сложный объект, описанный этой полезной нагрузкой JSON. Вставлено в классы выглядит примерно так:

public class Rootobject
{
    public string action { get; set; }
    public string method { get; set; }
    public Datum[][] data { get; set; }
    public string type { get; set; }
    public int tid { get; set; }
}

public class Datum
{
    public int AgreementTypeId { get; set; }
    public string Value { get; set; }
    public bool IsDeleted { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...