Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以某种方式将Json.NET Jarray格式化为字符串_C#_Arrays_String - Fatal编程技术网

C# 以某种方式将Json.NET Jarray格式化为字符串

C# 以某种方式将Json.NET Jarray格式化为字符串,c#,arrays,string,C#,Arrays,String,我有下面的代码,它在一个raw_coords JSON.NET JArray对象中循环 List<string> coords_final = new List<string>(); foreach (var item in raw_coords.Children()) { var itemcount = item.Count(); for (int i = 0; i < itemcount; i++) //loop through rows

我有下面的代码,它在一个raw_coords JSON.NET JArray对象中循环

List<string> coords_final = new List<string>();
foreach (var item in raw_coords.Children())
{
    var itemcount = item.Count();
    for (int i = 0; i < itemcount; i++) //loop through rows
    {
        var coord_temp1 = item[i].ToString();
        coord_temp1 = coord_temp1.Trim(new Char[] { ' ', ',', '.' });
        coord_temp1 = coord_temp1.Trim(new Char[] { ' ', '[', '.' });
        coord_temp1 = coord_temp1.Trim(new Char[] { ' ', ']', '.' });
        coord_temp1 = coord_temp1.Replace(',', ' ');
        coords_final.Add(coord_temp1);
    }
}
在上面的数据中,
coords\u final
确实变成了一个包含两个元素的数组。但是我需要的是一个字符串变量,它的数据格式为

(-9221176.0729 4120407.4526000023, -9221176.0427 4120407.6987999976), (..)..
我上面的代码改编自另一个C#程序,但当前生成的数据如下:

-9221176.0729 4120407.4526000023, -9221176.0427 4120407.6987999976, -9221176.1341 4120407.4602999985,
这不是我需要的


那么,如何使数据成为所需的格式——如上所示?我试着预先加上“(“和附加”)”,但没用。

假设
原始坐标是你的Jarray

List<string> myCoordsList = new List<string>();

foreach(JToken item in raw_coords)
{
    List<string> listOfPairs = new List<string>();
    var result = item.ToObject<JArray>();
    foreach (JToken jToken in result)
    {
        var jarray = (JArray) jToken;
        IEnumerable<string> nums = jarray.Values<string>();
        listOfPairs.Add(string.Join(" ", nums));
    }

    myCoordsList.Add(string.Format("({0})", string.Join(",", listOfPairs)));
}
string coordsString = string.Join(",", myCoordsList);

对于前几对坐标。

以下解决方案给出了您想要的结果:

string json = @"[ 
    [    -9221176.0728999991,    4120407.4526000023  ],  
    [    -9221176.0427000001,    4120407.6987999976  ]
 ]";

JArray raw_coords = JArray.Parse(json);
List<string> coords_final = new List<string>();

foreach (var item in raw_coords.Children())
{
    coords_final.Add("("+String.Join<object>(",", item)+")");
}

string coords = String.Join(",",coords_final.ToArray());

Console.WriteLine (coords);
string json=@”[
[    -9221176.0728999991,    4120407.4526000023  ],  
[    -9221176.0427000001,    4120407.6987999976  ]
]";
JArray raw_coords=JArray.Parse(json);
列表坐标_final=新列表();
foreach(raw_coords.Children()中的变量项)
{
coords_final.Add(“(”+String.Join(“,”,item)+”);
}
string coords=string.Join(“,”,coords_final.ToArray());
Console.WriteLine(coords);


(-9221176.07294120407.4526),(-9221176.042741204407.6988)

附加和预附加参数应该可以正常工作。你能发布不起作用的代码并解释发生了什么事吗?嗯,代码被删除了——基本上,我在最后用了一个额外的逗号,但是,正如你所看到的,我的代码也试图删除一个逗号。这可能是一个更好的方法。不要构建字符串,而是构建一个字典,然后在字典上使用一个序列化程序来获取正确的json,而不需要字符串解析混乱。是的,但我非常接近:“item”变量当前正在填充coords_最终列表字符串。它需要做的是将所有项目变量的数据输入到coords_final的一个元素中,并附上(和)。我已经编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。你的意思是反序列化原始坐标数组吗?哦。。。现在我明白了。。。项包含行。。。我会更新我的答案(反序列化项目[i]…)谢谢。让我再试一次。顺便说一句,我确实在上面的几行代码中反序列化了加载的JSON…不确定这是否会有任何影响。我认为您的代码不会像给定的那样工作:已经有包含您的代码的foreach:foreach(raw_coords.Children()中的var项)是的,正在发布整个JSON。。。它很大,所以我会给你一个链接谢谢!从未尝试过你的解决方案,但非常感谢你的帮助。
(-9221176.0729 4120407.4526),(-9221176.0427 4120407.6988),(-9221176.1341 4120407.4603),(-9221176.0729 4120407.4526),(-9221176.104 4120407.7063),(-9221176.1341 4120407.4603) ...
string json = @"[ 
    [    -9221176.0728999991,    4120407.4526000023  ],  
    [    -9221176.0427000001,    4120407.6987999976  ]
 ]";

JArray raw_coords = JArray.Parse(json);
List<string> coords_final = new List<string>();

foreach (var item in raw_coords.Children())
{
    coords_final.Add("("+String.Join<object>(",", item)+")");
}

string coords = String.Join(",",coords_final.ToArray());

Console.WriteLine (coords);