JSon.NET DeserializeObject <list <t>&gt;没有返回列表也没有给出错误</list <t>

时间:2010-05-11 18:23:26

标签: serialization json.net

我遇到了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) {
    }
}

我在这里做错了什么?我如何将其反序列化为用户列表?

4 个答案:

答案 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;搜索时的东西-.-)