【问题标题】:Deserialize Object JSON Error反序列化对象 JSON 错误
【发布时间】:2015-06-10 09:17:05
【问题描述】:

我需要反序列化一个对象。我有一个请求类;

public class LegacyDataRequest
    {
        public string RowId { get; set; }
        public string SchemaName { get; set; }
        public string TableName { get; set; }
        public string SelectStatement { get; set; }
    }

这里是响应类;

public class LegacyDataResponse
    {
        public List<KeyData> List { get; set; }
    }

我就是这样反序列化的;

var res = Newtonsoft.Json.JsonConvert.DeserializeObject<List<LegacyDataResponse>>(response.Substring(1, response.Length - 2));

这是回复;

[{"Key":"MUSTERI_NO","Data":"26594"},{"Key":"ADRES_KOD","Data":"E"},{"Key":"ADRES","Data":"DENİZ SEMA Site: 3"},{"Key":"SEMT","Data":"DUMLUPINAR"},{"Key":"IL_KOD","Data":"034"},{"Key":"POSTA_KOD","Data":""},{"Key":"ULKE_KOD","Data":"TR"},{"Key":"EMAIL","Data":""},{"Key":"ILK_GECERLILIK_TARIHI","Data":"7/28/2009 12:00:00 AM"},{"Key":"SON_GECERLILIK_TARIHI","Data":""},{"Key":"ILCE_KOD","Data":"10"},{"Key":"YARATAN_KULLANICI_KODU","Data":""},{"Key":"YARATILDIGI_TARIH","Data":""},{"Key":"EXTRE_ADRES_KOD_F","Data":"E"},{"Key":"DAHILI_NO","Data":""},{"Key":"ISYERI_UNVANI","Data":""},{"Key":"ADRES_TEYIT","Data":"E"},{"Key":"ADRES_TEYIT_TARIHI","Data":"9/21/2013 12:00:00 AM"},{"Key":"TELEFON_TEYIT","Data":"E"},{"Key":"TELEFON_TEYIT_TARIHI","Data":"9/25/2013 12:00:00 AM"},{"Key":"FAX_TEYIT","Data":"H"},{"Key":"FAX_TEYIT_TARIHI","Data":""},{"Key":"EMAIL_TEYIT","Data":"E"},{"Key":"EMAIL_TEYIT_TARIHI","Data":"9/25/2013 12:00:00 AM"},{"Key":"CONTACT_MOBILE_NUMBER","Data":"1"},{"Key":"CONTACT_EMAIL","Data":"1"},{"Key":"DIGER1_TEL_ALAN_KOD","Data":""},{"Key":"DIGER1_TEL_NO","Data":""},{"Key":"DIGER2_TEL_ALAN_KOD","Data":""},{"Key":"DIGER2_TEL_NO","Data":""},{"Key":"TEL_ALAN_KOD","Data":"216"},{"Key":"TEL_NO","Data":""},{"Key":"GSM_ALAN_KOD","Data":"532"},{"Key":"GSM_NO","Data":""},{"Key":"FAX_ALAN_KOD","Data":""},{"Key":"FAX_NO","Data":""}]

我遇到了一个错误;

无法反序列化当前 JSON 对象(例如 {"name":"value"}) 输入类型 'System.Collections.Generic.List`1[BankPozitif.CRM.Library.ZeusApi.LegacyDataResponse]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。

要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3]) 或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,不是集合类型 像数组或列表)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。

我该如何解决?

【问题讨论】:

  • 您是如何从一个返回键值映射到具有这些属性的类的 JSON 中获得的?它们根本不存在于您的 JSON 中。
  • 为什么要使用 Substring()?删除 [] 数组提名者,因此您的错误。
  • @YuvalItzchakov 是请求类。不是响应类

标签: c# .net json serialization


【解决方案1】:

我认为问题出在这里

{"Key":"ADRES","Data":"DENİZ SEMA Site: 3"}

改成

{"Key":"ADRES","Data":"DENİZ SEMA", "Site": 3"}

【讨论】:

  • 是响应字符串。这不成问题。应该有2个参数; Key和Data,就是Data内容。
【解决方案2】:

你反序列化为错误的类型。

public class Item
{
    public string Key { get; set; }
    public string Data { get; set; }
}

var res = JsonConvert.DeserializeObject<List<Item>>(response));

【讨论】:

    【解决方案3】:

    我找到了解决方案。我删除“.SubString()”,问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多