PHP JSON到C#对象如何反序列化JSON

问题描述:

如何反序列化在C#PHP JSON到C#对象如何反序列化JSON

{ “会计师” 这个JSON字符串:{ “系统标识”: “1”, “FIRST_NAME”: “测试” , “姓氏”: “测试”, “产品类型”: “样本” }}

我试了一下,到目前为止使用JsonConvert.DeserializeObject

var jsonObj = JsonConvert.DeserializeObject<AccountantData>(responseMessage);

这是我的模型

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    public List<UserData> Accountant { get; set; } 
} 
public class UserData 
{ 
    public UserData(int sysId, string firstName, string lastName, string productType) 
    { 
     SystemId = sysId; 
     FirstName = firstName; 
     LastName = lastName; 
     ProductType = productType; 
    } 

    [JsonProperty("sysid")] 
    public int SystemId { get; set; } 

    [JsonProperty("first_name")] 
    public string FirstName { get; set; } 

    [JsonProperty("last_name")] 
    public string LastName { get; set; } 

    [JsonProperty("product_type")] 
    public string ProductType { get; set; } 
} 

但这会导致一个错误

类型的异常 'Newtonsoft.Json.JsonSerializationException' 发生在Newtonsoft.Json.dll但在用户代码没有处理

其他信息:不能反序列化当前JSON对象(例如{ “名称”: “值”})成型 'System.Collections.Generic.List`1 [MyApp.UserData]',因为类型要求JSON阵列(例如[1,2,3]),以正确地反序列化。

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

你的JSON输入字符串是不正确的。 AccountantData使用ListUserData的(阵列)。试试这个:

{ 
    "accountant":[ 
     { 
     "sysid":"1", 
     "first_name":"Test", 
     "last_name":"Test", 
     "product_type":"Sample" 
     } 
    ] 
} 

更新: 如果你总是会拥有UserData一个对象,那么你可以改变你的AccountantData类为:

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    UserData Accountant { get; set; } 
} 

此外,如果你永远有单UserData对象,你有JSON数据的控制,那么你可以更新您的JSON数据输入到如下简单的格式:

{ 
    "sysid":"1", 
    "first_name":"Test", 
    "last_name":"Test", 
    "product_type":"Sample" 
} 

,然后反序列化这样的:

var jsonObj = JsonConvert.DeserializeObject<UserData>(responseMessage); 
+0

我使用json_encode得到rowdata后。我需要将其格式化为数组,当我json_encode? –

+0

如果我正确理解你的问题,不要认为它与json_encode有关。如果您的JSON数据总是只有一个UserData对象,那么您可以更新您的AccountantData类。我已经用解释更新了我的答案。 –