这是我之前问题的延续。该解决方案适用于我当时尝试做的事情,但破坏了我的很多代码。我知道不事先确定是不好的做法,但是是的......你生活和学习。
无论如何,这是问题:an easy way to serialise c# objects
我想知道的是:有没有办法让 NewtonSoft 库处理这些东西?如果是,如何?如果没有,建议?
我正在做的是使用 json 与 RoR3 应用聊天,现在我无法反序列化响应。这是一个小代码:
我从 RoR 得到的响应如下:
[{"directory":{"created_at":"2011-07-20T22:29:38Z","drive_info":1,"id":15,"name":"New Drive","parent":0,"size":0,"updated_at":"2011-07-20T22:29:39Z","user":1}}]
我正在尝试使用以下方法将其反序列化为目录对象列表:
public static CompositeCollection deserialise<T>(string json)
{
CompositeCollection result = new CompositeCollection();
JArray arr = JArray.Parse(json);
foreach (JObject obj in arr)
{
result.Add(JsonConvert.DeserializeObject<T>(obj.First.First.ToString()));
}
return result;
}
目录类的相关部分如下所示:
// [Serializable]
// [DataContract]
public class Directory
{
// [DataMember]
public int id { get; set; }
// [DataMember]
public string name { get; set; }
// [DataMember]
public int parent { get; set; }
// [DataMember]
public int drive_info { get; set; }
// [DataMember]
public int size { get; set; }
// [DataMember]
public int user { get; set; }
// [DataMember]
public string state
{
get
{
/* if (parent == 0)
return _state.identify();
Directory parental;
return parental.state;*/
if (parental != null)
return parental.state;
return _state.identify();
}
set
{
_state = StateFactory.getState(value);
}
}
//[JsonIgnore]
blah...
我大部分时间都可以通过取消注释 [Serializable] 来反序列化(有时我会收到以下错误:“System.Int32”类型的对象无法转换为“OffloadUI.Directory”类型。仍在调查中),并且我可以序列化通过取消注释 [DataContract] 和 [DataMember] 的所有实例。我需要的是双向工作的东西。
最佳答案
感谢 Zootius,我找到了一个有用的指南。这是我所做的,就像买来的一样:
[JsonObject(MemberSerialization.OptIn)]
public class Directory
{
[JsonProperty]
public int id { get; set; }
[JsonProperty]
public string name { get; set; }
[JsonProperty]
public int parent { get; set; }
关于c# - 更多 json c# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769532/