C # Newtonsoft JsonSerializationException при десериализации сериализованной строки - PullRequest
0 голосов
/ 05 октября 2018

Я, должно быть, делаю глупую ошибку.Когда я запускаю:

JsonResponse testREsponse = new JsonResponse
            {
                StartTimeUtc = 1,
                EndTimeUtc = 1,
                TimeResolutionInMilliseconds = 60000,
                Results = new JsonResults
                {
                    Type = "hello",
                    Values = new List<EvaluatedResult>()
                }
            };
            string convertTest = JsonConvert.SerializeObject(testREsponse);
            Console.WriteLine("HRMM " + convertTest);
            JsonResponse jsonResponse = JsonConvert.DeserializeObject<JsonResponse>(convertTest);

Я получаю

Unhandled Exception: Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'JarvisReader.JsonResults' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

при попытке десериализации строки, которую я сериализовал строкой выше.Это указывает на результаты 'Path'. $ Values ​​', строка 1, позиция 71.'это будет скобка с результатами.

Объекты:

class JsonResponse
{
    [JsonProperty("startTimeUtc")]
    public long StartTimeUtc { get; set; }
    [JsonProperty("endTimeUtc")]
    public long EndTimeUtc { get; set; }
    [JsonProperty("results")]
    public JsonResults Results { get; set; }
    [JsonProperty("timeResolutionInMilliseconds")]
    public int TimeResolutionInMilliseconds { get; set; }
}

class JsonResults
{
    [JsonProperty("$type")]
    public string Type { get; set; }

    [JsonProperty("$values")]
    public List<EvaluatedResult> Values { get; set; }
}

class EvaluatedResult
{
    [JsonProperty("dimensionList")]
    public DimensionList dimensionList { get; set; }
    [JsonProperty("evaluatedResult")]
    public decimal evaluatedResult { get; set; }
    [JsonProperty("seriesValues")]
    public List<Decimal> seriesValues { get; set; }
}

class DimensionList
{
    [JsonProperty("$type")]
    public string type { get; set; }

    [JsonProperty("$values")]
    public List<Dimension> values;
}

class Dimension
{
    [JsonProperty("key")]
    public string key { get; set; }
    [JsonProperty("value")]
    public string value { get; set; }
}

Я сократил свой тестовый ответ до почти пустого.И похоже, что он сериализуется просто отлично.

{"startTimeUtc":1,"endTimeUtc":1,"results":{"$type":"hello","$values":[]},"timeResolutionInMilliseconds":60000}

Когда я удаляю JsonResults из конструкции, он очень хорошо сериализуется и десериализуется.Что мне не хватает?Заранее спасибо.

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте выполнить следующее:

JsonConvert.DeserializeObject<JsonResponse>(convertTest, new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore });

$ указывает метаданные.При настройке сериализатора значение обрабатывается как свойство.

...