【问题标题】:Parsing string into key value pairs C# [duplicate]将字符串解析为键值对C# [重复]
【发布时间】:2020-07-07 19:43:34
【问题描述】:

我有调用另一个 API 的方法。来自

var activeCustomers = await response.Content.ReadAsStringAsync(); 我得到包含 [timestamp, value] 对象的字符串:

{"values":[[1298937600000,1],[1459468800000,16],[1462060800000,527],[1464739200000,173],[1467331200000,132],[1470009600000,166],[1472688000000,151],[1475280000000,172],[1477958400000,139],[1480550400000,129],[1483228800000,116],[1485907200000,133],[1488326400000,180],[1491004800000,227],[1493596800000,281],[1496275200000,263],[1498867200000,230],[1501545600000,326],[1504224000000,403],[1506816000000,442],[1509494400000,1019],[1512086400000,650],[1514764800000,708],[1564617600000,2614],[1567296000000,2527],[1569888000000,3144],[1572566400000,3075],[1575158400000,2541],[1577836800000,2246],[1580515200000,2456],[1583020800000,885]]}

我想将这些值解析为键值对,但我不确定什么是最优化的方法。

我尝试删除字符串的开头和结尾并将其转换为对象,但它在 ienumerable 中仍然是一个大字符串:

            int index = activeCustomers.IndexOf(":");
            if (index > 0)
                activeCustomers = activeCustomers.Substring(index + 1);
            activeCustomers = activeCustomers.Remove(activeCustomers.Length - 1);

            var results = ((IEnumerable) activeCustomers).Cast<object>();

我也尝试为此制作正则表达式,但我对此不太满意。

【问题讨论】:

  • 它是 JSON。只需使用 JSON 反序列化器。
  • 为什么不直接反序列化 JSON。您的字符串由一个具有单个属性“值”的对象组成,该属性是一个数组数组。内部数组总是由一对数字组成(第一个是 long,第二个是 int)。
  • @AlexeiLevenkov 似乎,链接的副本不正确。 OP 可以使用 JSON 反序列化
  • @PavelAnikhouski 谢谢 - 不知道为什么我会得到那个错误的副本。更新以更正。

标签: c# json asp.net-core .net-core


【解决方案1】:

这只是一个带有数组数组的 JSON,可以使用 Json.NET 轻松反序列化

var result = JsonConvert.DeserializeObject<Root>(activeCustomers);

System.Text.Json

var result = JsonSerializer.Deserialize<Root>(activeCustomers);

Root 在哪里

public class Root
{
    public long[][] values { get; set; }
}

然后您可以使用Select 方法将values 属性映射到任何所需的结构

var pairs = result.values.Select(v => new { timestamp = v[0], value = v[1] }).ToList();

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多