未从 Json 反序列化中获取对象数据

Not getting object data from Json deserialization

我正在从 Web 服务器获取 Json 数据,但是当我尝试将其反序列化为对象时,我没有获取任何数据。 Json 字符串如下所示:

{"success":true,"data":[{"Id":6,"CustomerGuid":"70b390d8-82d5-4bba-aa68-fc8268a1b1ff","UserName":"victoria_victoria@nopCommerce.com","Email":"victoria_victoria@nopCommerce.com","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472393)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472393)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":5,"CustomerGuid":"eb9e6f24-f362-4c10-942a-366e2919dc11","UserName":"brenda_lindgren@nopCommerce.com","Email":"brenda_lindgren@nopCommerce.com","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472363)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472363)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":4,"CustomerGuid":"9f46dbae-6942-410c-90b8-9b38a0890064","UserName":"james_pan@nopCommerce.com","Email":"james_pan@nopCommerce.com","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472317)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472317)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":3,"CustomerGuid":"6277386b-13ee-427b-9cfe-4ebfa487c340","UserName":"arthur_holmes@nopCommerce.com","Email":"arthur_holmes@nopCommerce.com","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472253)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472253)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":2,"CustomerGuid":"241f45f1-b38c-4e22-8c5a-743fa3276620","UserName":"steve_gates@nopCommerce.com","Email":"steve_gates@nopCommerce.com","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472207)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472207)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":1,"CustomerGuid":"a940dc03-5f52-47d2-9391-8597b3b31cf2","UserName":"tony@lakesideos.com","Email":"tony@lakesideos.com","CustomerRoles":[{"Id":1,"Name":"Administrators","SystemName":"Administrators"},{"Id":2,"Name":"Forum Moderators","SystemName":"ForumModerators"},{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":true,"Active":true,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":"71.185.255.7","CreatedOnUtc":"\/Date(1472933470783)\/","LastLoginDateUtc":"\/Date(1477522483903)\/","LastActivityDateUtc":"\/Date(1477523996553)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[{"Id":1,"StoreId":1,"ShoppingCartTypeId":1,"CustomerId":1,"ProductId":18,"AttributesXml":null,"CustomerEnteredPrice":0.0000,"Quantity":1,"CreatedOnUtc":"\/Date(1473801903447)\/","UpdatedOnUtc":"\/Date(1473803336207)\/","IsFreeShipping":false,"IsShipEnabled":true,"AdditionalShippingCharge":0.0000,"IsTaxExempt":false}]}]}

我根据此 link 中给出的建议创建了这些 classes: recommendation

我用它来创建 classes:json2csharp

响应class:

class Response
{
    bool success;
    IList<Customer> data;
}

客户class:

class Customer
{
    public int Id { get; set; }
    public string CustomerGuid { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public List<CustomerRole> CustomerRoles { get; set; }
    public object AdminComment { get; set; }
    public bool IsTaxExempt { get; set; }
    public int AffiliateId { get; set; }
    public int VendorId { get; set; }
    public bool HasShoppingCartItems { get; set; }
    public bool Active { get; set; }
    public bool Deleted { get; set; }
    public bool IsSystemAccount { get; set; }
    public object SystemName { get; set; }
    public string LastIpAddress { get; set; }
    public DateTime CreatedOnUtc { get; set; }
    public DateTime? LastLoginDateUtc { get; set; }
    public DateTime LastActivityDateUtc { get; set; }
    public List<object> ExternalAuthenticationRecords { get; set; }
    public List<object> ShoppingCartItems { get; set; }

}

客户角色class:

class CustomerRole
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string SystemName { get; set; }

}

外部身份验证记录class:

class ExternalAuthenticationRecord
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string Email { get; set; }
    public object ExternalIdentifier { get; set; }
    public object ExternalDisplayIdentifier { get; set; }
    public object OAuthToken { get; set; }
    public object OAuthAccessToken { get; set; }
    public string ProviderSystemName { get; set; }
}

ShoppingCartItem class:

class ShoppingCartItem
{
    public int Id { get; set; }
    public int StoreId { get; set; }
    public int ShoppingCartTypeId { get; set; }
    public int CustomerId { get; set; }
    public int ProductId { get; set; }
    public object AttributesXml { get; set; }
    public double CustomerEnteredPrice { get; set; }
    public int Quantity { get; set; }
    public DateTime CreatedOnUtc { get; set; }
    public DateTime UpdatedOnUtc { get; set; }
    public bool IsFreeShipping { get; set; }
    public bool IsShipEnabled { get; set; }
    public double AdditionalShippingCharge { get; set; }
    public bool IsTaxExempt { get; set; }

}

我正在使用此语句反序列化 Json 字符串:Response res = (Response)JsonConvert.DeserializeObject(customerJson, (typeof(Response)));

当我在调试器中停止它时,它显示 "res" 为数据:null 和成功:false。

我没有收到任何错误。它只是没有给我 Json 字符串中的数据。

任何人都可以提供任何帮助来弄清楚为什么我在 "res" 中没有得到我想要的数据,我们将不胜感激。

谢谢, 托尼

此问题与您 Response class 中的可访问性级别有关。默认情况下,字段 属性 和方法是私有的,因此 JsonConvert 无法填充属性。
更改 class 如下:

class Response
{
    public bool success {get; set;}
    public IList<Customer> data {get; set;}
}

它会起作用的。
另一个改进与 JsonConvert 的使用有关。为避免显式转换,请使用此类型转换:JsonConvert.DeserializeObject<T>(string) 其中 T 将是 Response