将JSON数组反序列化为字符串数组

时间:2016-02-04 04:07:55

标签: c# .net json serialization json.net

假设我有一个string表示JSON格式的对象数组:

string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";

我想要的是一个字符串数组,每个字符串是JSON对象的字符串表示 - NOT 对象本身。看起来应该是这样的:

string[] s = new string[]
{
     "{\"name\":\"Person1\"}",
     "{\"name\":\"Person2\"}"
};

1)几乎我尝试的每一次搜索都会产生数百万条关于如何使用(例如)Json.NET简单地反序列化JSON字符串的结果。这我想做什么。

2)我尝试构建一个表示对象的类,以暂时循环遍历反序列化/序列化映射,每个映射到数组中的字符串,但对象的模式是可变的(因此我只需要一个字符串表示)。

3)我尝试了一些正则表达式来尝试这样做,但是我的JSON字符串可以包含包含JSON字符串作为其值的字段(icky,但不在我的控制范围内),因此嵌套字符转义等会让我部分疯狂在我决定在这里寻求帮助之前。

当然这应该很简单?有人有指点吗?

3 个答案:

答案 0 :(得分:3)

您需要对其进行反序列化,然后单独序列化每个对象。 例如(使用Newtonsoft.Json):

string json = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";

var objects = JsonConvert.DeserializeObject<List<object>>(json);
var result = objects.Select(obj => JsonConvert.SerializeObject(obj)).ToArray();

收益率(作为string[]):

{"name":"Person1"} 
{"name":"Person2"} 

如果你试图避免反序列化和序列化,你几乎肯定会遇到会破坏你的代码的边缘情况。

答案 1 :(得分:1)

string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";
var Json = JsonConvert.DeserializeObject<List<object>>(s);
string[] Jsonn = Json.Select(x => x.ToString()).ToArray();

Response from [] Jsonn

[] Jsonn返回字符串数组,而不是使用JObject格式化的对象数组。

希望这个能帮到你。

答案 2 :(得分:-4)

你为什么不用这个

string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";

string[] t = s.Split(',');

我试了一下。它只是给你你想要的字符串数组....

相关问题