Json Сериализация и десериализация нескольких объектов - PullRequest
0 голосов
/ 13 марта 2019

Решение может существовать, но я пробовал несколько вещей в Интернете, но я не могу найти подходящее решение. Вот мой сценарий. Я хотел передать две модели в сериализацию (я использую Json.JsonConvert.SerializeObject) для отправки в мой API. Что я сделал до сих пор

На клиенте: у меня есть mOrder (модель заказа) и mOPLog (модель журнала). И то, и другое я объединил в один и отправил в Json Serializer, затем в мой API

 var data = new
                {
                    DataTable1 = mOrder,
                    DataTable2 = mOPLog
                };
                string sUrl = GlobalParameters.Host + "api/Order/UpdateOrderWithLog";
                string sResult = HttpHelper.httpPut(sUrl, Newtonsoft.Json.JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented));

Тогда на стороне контроллера Api я заявляю вот так.

public Models.ApiResult UpdateOrderWithLog(dynamic data)
        {
            Models.Order model = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.Order>(data.ChildrenTokens[0].First);

Выдает ошибку при десериализации и привязке к моей модели. Я могу получить Данные по API Controller. Вот данные, как это выглядит.

    {{
  "DataTable1": {
    "OrderID": "0000006915",
    "GroupID": "0000000001",
    "GroupCode": "WG01",
    "GroupName": "MatGroup",
    "ShiftID": "0000000001",
    "ShiftCode": "WS01",
    "ShiftName": "DayShift",
    "OrderDate": "2019-03-08T10:25:09.243",
    "OrderNO": "0000006915",
    "Memo": "Test123",
    "OrderDetail": [
      {
        "OrderDetailID": "0000007103",
        "OrderID": "0000006915",
        "SourceType": "IQR",
        "SourceID": "0000126061",        
        "Memo": "",
        "Accept": false
      },
      {
        "OrderDetailID": "0000007104",
        "OrderID": "0000006915",
        "SourceType": "IQR",
        "SourceID": "0000126062",       
        "Memo": "",
        "Accept": false
      }
    ]
  },
  "DataTable2": {
    "LogID": null,
    "LogType": "Update",
    "OperatorName": "admin",
    "OperatingTime": "2019-03-13T05:53:43.5940133+08:00",
    "OperationType": "Order",
    "Operation": "0000006915",
    "OperationContent": "",
    "OperatingSystem": "Win10",
    "TerminalName": "DH01",
    "IPAddress": "192.168.16.124"
  }
}}

Но система выдает «Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера» Я не уверен, где я делаю ошибку. Если кто-нибудь сталкивался с Json Serializing и De serialization нескольких объектов. Любая помощь будет принята с благодарностью. Спасибо

Обновление: Я создал класс с динамической моделью, а затем отправил его в API Controller.

 public class LogDyModel
{
    public dynamic m1 { get; set; }
    public dynamic m2 { get; set; }
}

на моем клиенте я связываю свою модель с этой динамикой и отправляю на мой контроллер API

Models.LogDyModel data = new Models.LogDyModel();
                data.m1 = mOrder;
                data.m2 = mOPLog;

На моем контроллере API

public Models.ApiResult UpdateOrderWithLog(Models.LogDyModel data)
    {
        var deserial = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.LogDyModel>(Newtonsoft.Json.JsonConvert.SerializeObject(data));
        Models.Order model = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.Order>(Newtonsoft.Json.JsonConvert.SerializeObject(deserial.m1));
        Models.OpLog mLog = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.OpLog>(Newtonsoft.Json.JsonConvert.SerializeObject(deserial.m2));

Теперь все отсортировано, как я хотел. Надеюсь, что это поможет кому-то похожему вопросу. Спасибо за поддержку, кто бы ни пытался проверить и помочь мне.

...