Преобразование из json в список <object> вызывающее исключение

Итак, вот моя проблема, у меня есть настройка API, которая возвращает результаты из таблицы хранения Azure в формате строки JSON:

   [{
        "CustID": "f3b6.....0768bec",
        "Title": "Timesheet",
        "CalendarID": "AAMkADE5ZDViNmIyLWU3N2.....pVolcdmAABY3IuJAAA=",
        "PartitionKey": "Project",
        "RowKey": "94a6.....29a4f34",
        "Timestamp": "2018-09-02T11:24:57.1838388+03:00",
        "ETag": "W/\"datetime'2018-09-02T08%3A24%3A57.1838388Z'\""
    }, {
        "CustID": "5479b.....176643c",
        "Title": "Galaxy",
        "CalendarID": "AAMkADE5Z.......boA_pVolcdmAABZ8biCAAA=",
        "PartitionKey": "Project",
        "RowKey": "f5cc....86a4b",
        "Timestamp": "2018-09-03T13:02:27.642082+03:00",
        "ETag": "W/\"datetime'2018-09-03T10%3A02%3A27.642082Z'\""
    }]

И я пытаюсь преобразовать его обратно в объект проекта:

public class Project : TableEntity
    {
        public Project() { }

        public Project(string rKey, string pKey = "Project")
        {
            this.PartitionKey = pKey;

            this.RowKey = rKey;
        }

        public Guid CustID { get; set; }
        public string Title { get; set; }
        public string CalendarID { get; set; }
    }

Я продолжаю получать "Ошибка преобразования значения из" строки "в" объект ".

Я пробовал: это, это, это, это, это, это и это, и это не сработает. Всегда такая же ошибка. Очевидно, что я что-то упускаю, но прошло уже два дня, и я не могу понять, как это понять. Попробовали модифицировать класс объекта для включения всех полей, попробовали добавить еще один класс с свойством списка, даже попытались передать его как Массив.

В этот момент я был бы признателен за любую помощь.

Ответ 1

Проблема в том, что у вас есть строка CustID которую нельзя десериализовать в Guid.

Вы можете использовать JsonConverter для преобразования string в Guid по десериализации (доступно в JSON.NET):

public class GuidJsonConverter : JsonConverter<Guid>
{
    public override void WriteJson(JsonWriter writer, Guid value, JsonSerializer serializer)
    {
        writer.WriteValue(value.ToString());
    }

    public override Guid ReadJson(JsonReader reader, Type objectType, Guid existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        string s = (string)reader.Value;

        return new Guid(s);
    }
}

Два способа его использования:

  • DeserializeObject экземпляр преобразователя в метод DeserializeObject (пример здесь)
  • Применить [JsonConverter(typeof(GuidJsonConverter))] к свойству CustID

    [JsonConverter(typeof(GuidJsonConverter))]
    public Guid CustID { get; set; }
    

Ответ 2

Используйте string вместо Guid:

 public string CustID { get; set; }

Как говорится в ошибке: Error converting value string to object, единственный объект, который у вас есть, - это Guid которого, вероятно, есть проблема с десриализацией строки в нем.