JSON не сохраняет значения после десериализации - PullRequest
0 голосов
/ 03 июля 2018

Я хочу десериализовать строку, которая на самом деле является массивом объектов, это вывод сериализации

 [
       {
           \"CallType\":1,\
            "ExecutionStart\":\"2018-07-03T12:25:55.1919951+03:00\",\
            "ExecutionEnd\":\"2018-07-03T12:25:55.3980081+03:00\",\
            "UnitExecutionStart\":\"0001-01-01T00:00:00\",\
            "OverallExecution\":205
        }
 ]

Это объект, к которому я хочу сделать десериализацию

[JsonObject]
public class PerformanceMetricsItemDtoX
{
    public PerformanceMetricsItemDtoX()
    {

    }

    public CallType CallType { get; } //=> CallType is an enum
    public DateTime ExecutionStart { get; }
    public DateTime ExecutionEnd { get; }
    public DateTime UnitExecutionStart { get; }
    public long OverallExecution { get; }
}

После десериализации

var result = value.SelectMany(item =>
            JsonConvert.DeserializeObject<List<PerformanceMetricsItemDtoX>>(item));

Конечный результат объекта имеет значения по умолчанию, поэтому он не сохраняет значение, сохраненное в сериализованной версии.

Что я делаю не так?

Спасибо

Кстати, я пытался использовать

var result = new System.Web.Script.Serialization.JavaScriptSerializer()
     .Deserialize<List<PerformanceMetricsItemDtoX>>(value.FirstOrDefault());

но вывод такой же.

1 Ответ

0 голосов
/ 03 июля 2018

Ваши PerformanceMetricsItemDtoX свойства имеют значение только для чтения , поэтому JsonConvert (и никто на самом деле) не может присвоить им значения после вызова конструктора. Используйте это:

[JsonObject]
public class PerformanceMetricsItemDtoX
{
    public CallType CallType { get; set; } //=> CallType is an enum
    public DateTime ExecutionStart { get; set; }
    public DateTime ExecutionEnd { get; set; }
    public DateTime UnitExecutionStart { get; set; }
    public long OverallExecution { get; set; }
}
...