Сериализация строки ISO8601 в C # TimeSpan - PullRequest
0 голосов
/ 15 мая 2019

Мой проект является проектом ASP.Net MVC.В JavaScript у меня есть строка ISO 8601, например "PT15M".Как определить мою модель так, чтобы она правильно сериализовалась в TimeSpan объект?

Вот мой Javascript:

var model = new TemplateMapModel();
model.DelayBy = "PT15M";
if (PerformClientSideValidation(model)) {
    $.ajax({
        type: 'POST',
        url: '/api/TemplateMap',
        data: { templateMap: model, files: files },
        success: function (result) {
            $('#modalTemplateMap').modal('toggle');
        },
        error: function (xhr, textStatus, e) { 
            var error = xhr.responseJSON.Message;
            ShowMessageBox("Error", error);
            ToggleBusyIndicator(false);
        },
        complete: function (xhr, textStatus) {
            TEMPLATEMAPPING.grid.reload();
        }
    });
}

Я пробовал это в моей модели:

public TimeSpan DelayBy { get; set; }

В результате получается нулевое значение.Я также попробовал это:

public string DelayBy { get; set; }

Это будет работать, и тогда я смогу использовать XmlConvert.ToTimeSpan(), чтобы получить то, что я хочу, однако я бы предпочел не делать это таким образом, потому что это не похоже направильный способ - объявить мой DelayBy как строку, а затем преобразовать его в мою бизнес-логику.Я хотел бы использовать это определение:

public TimeSpan DelayBy { get; set; }

и чтобы MVC автоматически преобразовывал его в объект TimeSpan и обратно.Есть идеи?

1 Ответ

0 голосов
/ 15 мая 2019

Попробуйте определить setter/getter

private TimeSpan _delayBy; 
public TimeSpan DelayBy { 
   get { 
      return this._delayBy;
   }
   set {
      this._delayBy = XmlConvert.ToTimeSpan(value.ToString());
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...