【问题标题】:Deserialize JSON (Json.NET)反序列化 JSON (Json.NET)
【发布时间】:2017-09-06 09:26:48
【问题描述】:

我需要一些关于 json 反序列化的帮助。我是第一次使用Json,所以对它了解不多。

我使用网络客户端得到以下字符串:

[{"name": "somename", "data": [[72, 1504601220], [null, 1504601280], ..., [125, 1504605840]]}]

并尝试使用

对其进行序列化
JsonConvert.DeserializeObject<TestObject>(jsonstring)

我的班级是这样的:

public class TestObject
{
    [JsonProperty(PropertyName = "name")]
    public string TargetName { get; set; }

    [JsonProperty(PropertyName = "data"]
    public List<?????> DataPoints {get; set;}
}

如何设计我的类以获取某种集合中的数据值,以便每个条目包含括号内的两个值?

感谢您的耐心和帮助!

【问题讨论】:

    标签: c# json json-deserialization


    【解决方案1】:

    您的数据是包含可为空整数的数组列表(从外观上看)

    [JsonProperty(PropertyName = "data"]
    public List<int?[]> DataPoints {get; set;}
    

    【讨论】:

    • 这看起来很有希望,但我得到了 JsonSerializationException(“无法反序列化当前 JSON 数组 [...],因为该类型需要 JSON 对象 [...] 才能正确反序列化。”)跨度>
    • @ErikT。看起来您从控制台复制了一些 JSON 字符串,其中包含此字符 (...) 而不是真正的实际 JSON 文本。看这个活生生的例子,它在没有那个字符的情况下工作:rextester.com/ESC67816
    • 愚蠢的我用 代替了 >。它现在工作正常。谢谢!
    【解决方案2】:

    试试这个网站:http://json2csharp.com/ 如果你只有一个纯 JSON 文本,这个网站可以节省你很多时间。它可以帮助您将其转换为 C# 对象,尽管您仍然需要仔细检查它。

    var data = "[{\"name\": \"somename\", \"data\": [[72, 1504601220], [null, 1504601280], [125, 1504605840]]}]";
    var obj = JsonConvert.DeserializeObject<List<TestObject>>(data);
    
    public class TestObject
    {
        [JsonProperty(PropertyName = "name")]
        public string TargetName { get; set; }
        [JsonProperty(PropertyName = "data")]
        public List<int?[]> DataPoints { get; set; }
    }
    

    【讨论】:

    • 感谢您对该网站的推荐。似乎非常有用,尤其是对于较大的字符串。
    【解决方案3】:

    对此有一些解决方案,C# 7.0 也支持 ValueTuple 比如这个例子。

    List<(int? ,int?)> DataPoints { get; set; }
    // if it not work try this.
    List<List<int?>> DataPoints { get; set; }
    

    如果您的 json 内部数组元素计数等于 2,那么可以假设您使用值元组。

    假设它对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多