我遇到了Json.NET库及其DeserializeObject方法。文档对于这里可能发生的事情并不十分清楚,所以如果有人能够解释如何将JSON反序列化为用户对象列表,我将不胜感激。
我正在尝试反序列化此JSON
[
{"userid":"0",
"listid":1,
"lastname":"Mann",
"inplace":true,
"xpos":428,
"ypos":111
},
{"userid":"1",
"listid":1,
"lastname":"Parker",
"inplace":true,
"xpos":334,
"ypos":154
},
{"userid":"2",
"listid":1,
"lastname":"Terry",
"inplace":true,
"xpos":513,
"ypos":160
}
]
进入用户对象
[JsonObject(MemberSerialization.OptIn)]
public class User
{
[JsonProperty(PropertyName = "userid")]
public string userid { get; set; }
[JsonProperty(PropertyName = "listid")]
public int listid { get; set; }
[JsonProperty(PropertyName = "lastname")]
public string lastname { get; set; }
[JsonProperty(PropertyName = "inplace")]
public bool inplace { get; set; }
[JsonProperty(PropertyName = "xpos")]
public int xpos { get; set; }
[JsonProperty(PropertyName = "ypos")]
public int ypos { get; set; }
public User()
{
}
}
使用
List<User> users = JsonConvert.DeserializeObject<List<User>>(jsonUsers);
没有成功。没有任何错误,也没有用户。 JsonConvert.DeserializeObject只是默默地死去。
我尝试创建模型并使用该JSON字符串执行SerializeObject和DeserializeObject,但结果相同,没有错误,没有结果。
我甚至尝试传递serializersettings以查明错误但没有错误
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Error += delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args) {
errorList.Add(args.ErrorContext.Error.Message);
};
List<User> users = JsonConvert.DeserializeObject<List<User>>(jsonUsers, settings);
当我试图查看反序列化过程中发生的事情时,我注意到上下文没有初始化?!
public class User
{
...
[OnDeserializing]
internal void OnDeserializing(StreamingContext context) {
}
}
我在这里做错了什么?我如何将其反序列化为用户列表?
答案 0 :(得分:7)
我发现了什么问题。 JSon.NET将我的整数从JSON反序列化为Int64而不是Int32,所以我把它放在long而且一切都按原样运行。
有没有办法指定我希望将这些属性反序列化为int?
答案 1 :(得分:4)
此时你可能已经解决了这些问题,但是如果有人发现这个问题可能会有所帮助。
我正在使用Json.net库来反序列化自定义复杂的分层对象。我有几个转换器从Json转换为c#对象。
您可以使用JsonConvertAttributes来转换属性的返回类型。
[JsonConverter(typeof(Int32))]
public int xpos { get; set; }
如果要返回自定义反序列化对象,可以编写自己的转换器,Json.net将使用此自定义转换器转换/转换反序列化对象。
Sanjay Zalke
答案 2 :(得分:1)
我遇到了同样的问题,因为我的课程中没有默认构造函数(带有空参数的构造函数)
答案 3 :(得分:1)
我对T列表也没有运气,没有错误但只有空结果:
SomeClassList obj = JsonConvert.DeserializeObject<SomeClassList>(jsonstring);
public class SomeClass
{
public string SomeProp {get;set;}
(...)
}
public class SomeClassList
{
public List<SomeClass> SomeClass {get;set;}
}
对我来说,以下是解决方案。我只能猜测这个解释,所以我认为你只需使用Code代码就可以了:
String[][] stringz = new String[5][4];
System.out.println(stringz[x][y]);
希望它有所帮助。 (如果没有,祝你好运整理所有那些json&#34; null设置&#34;搜索时的东西-.-)