将字符串[123,234,...]转换为List <int>并返回的更好方法

时间:2019-02-25 08:42:18

标签: c# .net json.net

基本上,我正在尝试转换看似存储在字符串类型中的整数值数组。

[123,234,345,456] // example

当前,我正在执行以下操作以将字符串转换为List<int>int[]:

var intList = "[123,234,345,456]".Replace("[","").Replace("]","").Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).Tolist();

(sort, add, remove)上执行必需的操作list,然后convert返回string

string.Format("[{0}]", string.Join(",", intList));

但是这让我开始思考。我正在使用的数据看起来像JSON。当然,必须有一种更直接的方法将converting string转换为array of integers吗?

我研究了使用JArray.Parse(string)中的Newtonsoft.Json.Linq,但这不只是增加了一层复杂性,因为我现在正在处理JArray<JToken>而不是标准的int[]

如果任何人都拥有更整洁的解决方案,而无需添加methodsextensionslibraries,那么,如果您能分享您的知识,我将不胜感激。

2 个答案:

答案 0 :(得分:19)

您是正确的-JSON 可以为您做到这一点:

using System;
using Newtonsoft.Json;

namespace Demo
{
    class Program
    {
        static void Main()
        {
            string test = "[123,234,345,456]";

            var result = JsonConvert.DeserializeObject<int[]>(test);

            // This prints "123, 234, 345, 456"

            Console.WriteLine(string.Join(", ", result));

            string andBackAgain = JsonConvert.SerializeObject(result);

            // This prints "[123,234,345,456]"

            Console.WriteLine(andBackAgain);
        }
    }
}

答案 1 :(得分:0)

如果您打算用双引号解析数字,则

    string input = @"[123,234,345,456]";
    string pattern = @"\d+";
    var result = Regex.Replace(input, pattern, "\"$&\"");
    result.Dump();
    //["123","234","345","456"]

或解析数组括号内的整个对象

    string input = @"[123,234,345,456]";
    string pattern = @"(\d+\s*,?\s*)+";
    var result = Regex.Replace(input, pattern, "\"$&\"");
    result.Dump();
    //["123,234,345,456"]