c# - 更多 json c# 问题

标签 c# json json.net

这是我之前问题的延续。该解决方案适用于我当时尝试做的事情,但破坏了我的很多代码。我知道不事先确定是不好的做法,但是是的......你生活和学习。

无论如何,这是问题: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/

相关文章:

c# - 将以@符号开头的JSON属性反序列化为C#动态对象?

javascript - jQuery AJAX 中的另一个函数完成后重新运行原始函数

c# - newtonsoft.json 与 microsoft.aspnetcore.mvc.newtonsoft.json - 有什么区别?

c# - 如何在 Javascript 中使用模型?

c# - MediaPlayer 中的内存泄漏

java - 读取并附加到 json 文件

javascript - $.each + json + 点击事件 + 对象输出

c# - 如何让 WebAPI 使用 JsonProperty(Required = Required.Always) 验证我的 JSON?

c# - WebApi 返回 HTTP 响应后是否可以执行代码?

c# - 使用异步任务不流动的逻辑 CallContext 值