问题 从json转换为List 导致异常


所以这是我的问题,我有一个API设置,以JSON字符串格式返回Azure存储表的结果:

   [{
        "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'\""
    }]

我试图将其转换回Project对象:

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; }
    }

我不断收到“将值从'string'转换为'object'的错误。

我努力了 : 这个这个这个这个这个这个 和 这个 它不会起作用。总是一样的错误。很明显我错过了一些东西,但已经有两天了,我似乎无法弄明白。尝试修改对象类以包含所有字段,尝试添加另一个具有list属性的类,甚至尝试将其作为Array传递。

在这一点上,我将感激任何形式的帮助。


6982
2017-09-03 11:20


起源

I have tried : this,this,this,this,this,this and this <==这使得我的一天,在提出问题之前至少尝试过 - Saruman
我认为它可能是Guid - Saruman
你能告诉我们你实际称之为反序列化的地方吗? - Patrick Hofman
如果您将CustID表单Guid更改为String,它将适用于您 var m = JsonConvert.DeserializeObject<List<Project>>(json); - styx
是那个 真实 JSON?因为那显然不是GUID。 - nvoigt


答案:


问题是你有一个字符串 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 方法(例子 这里
  • 应用 [JsonConverter(typeof(GuidJsonConverter))] 到了 CustID 属性

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

7
2017-09-03 11:27





使用 string 代替 Guid :

 public string CustID { get; set; }

正如错误所述: Error converting value string to object ,你到那里唯一的目标是 Guid 这可能有一个问题,希望在其中的字符串。


2
2017-09-03 11:27