C#将json转换为多个类
我有个问题。我试图将我的json解析为2个类。以下是json:C#将json转换为多个类,c#,json,parsing,serialization,C#,Json,Parsing,Serialization,我有个问题。我试图将我的json解析为2个类。以下是json: { "user":[ [ { "Id":"0", "Username":"Vreeswijk", "ProfilePicture":"media/user/0.png" } ] ], "token":[ [ { "access_to
{
"user":[
[
{
"Id":"0",
"Username":"Vreeswijk",
"ProfilePicture":"media/user/0.png"
}
]
],
"token":[
[
{
"access_token":"myToken1",
"refresh_token":"myToken2",
"expires_in":3600,
"expires_on":1577363756
}
]
]
}
这是我的两门课:
public class Token
{
public string access_token { get; set; }
public string refresh_token { get; set; }
public int expire_in { get; set; }
public int expire_on { get; set; }
public Token() { }
}
下面是用户类:
public class User
{
[PrimaryKey]
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string ProfilePicture { get; set; }
public User() { }
public User(string Username, string Password)
{
this.Username = Username;
this.Password = Password;
}
}
现在我想将json反序列化到这两个类。
下面是我的代码,它只适用于1个类:
var jObject = JObject.Parse(json);
var userPropery = jObject["user"] as JArray;
userList= new List<user>();
foreach (var property in userPropery )
{
var propertyList = JsonConvert.DeserializeObject<List<user>>(property.ToString());
userList.AddRange(propertyList);
}
var jObject=jObject.Parse(json);
var userPropery=jObject[“user”]作为JArray;
userList=新列表();
foreach(UserProperty中的var属性)
{
var propertyList=JsonConvert.DeserializeObject(property.ToString());
AddRange(propertyList);
}
如何在1个json中为2个类执行此操作?您可以为您的json创建一个
根
类,并根据需要使用用户
和令牌
类在其中添加两个属性
公共类根目录
{
公共列表用户{get;set;}
公共列表标记{get;set;}
}
然后在
反序列化object
函数中传递此类以反序列化json。如果观察json,则用户和令牌都是嵌套数组。现在,您可以创建具有两个必需属性的根类。比如说
public class Root
{
public List<List<User>> user { get; set; }
public List<List<Token>> token { get; set; }
}
要获得平坦的用户和令牌列表,可以使用
var userList= root.user.SelectMany(x=>x);
var tokenList= root.token.SelectMany(x=>x);
为什么不创建一个同时包含
user
和token
的类呢?
如果不这样做,请逐个解析。好的,但我不需要使用列表,因为我总是返回1个元素。但是我需要如何处理这一行:
var userPropery=jObject[“user”]作为JArray代码>。。。。。我现在需要这两个?您是否尝试过使用var-tokenPropery=jObject[“token”]作为JArray
使用现有代码反序列化?当我将json直接放入反序列化程序时,会出现以下错误:Newtonsoft.json.JsonSerializationException:'无法将当前json数组(例如[1,2,3])反序列化为类型'MyApp.Models.User',因为该类型需要json对象(例如,{“name”:“value”})正确反序列化。
希望您在将Json字符串解析为JObject后直接使用它,而不是它的一部分?我没有将任何内容解析为JObject。我提供了从页面中获得的结果
var userList= root.user.SelectMany(x=>x);
var tokenList= root.token.SelectMany(x=>x);