JSON数组到C#列表

vd2z7a6w  于 2023-05-02  发布在  C#
关注(0)|答案(6)|浏览(160)

如何在C#中将这个简单的JSON字符串反序列化为列表?

["on4ThnU7","n71YZYVKD","CVfSpM2W","10kQotV"]

这样,

List<string> myStrings = [the content of the JSON above]

我正在使用系统中的DataContractJsonSerializer。Runtime.Serialization.JSON,不需要外部库。
编辑:在系统中找到JavaScriptSerializer。序列化也是可以接受的。

pzfprimi

pzfprimi1#

就这么做

string json = "[\"on4ThnU7\",\"n71YZYVKD\",\"CVfSpM2W\",\"10kQotV\"]";
  var result = new JavaScriptSerializer().Deserialize<List<String>>(json);
u1ehiz5o

u1ehiz5o2#

您可以将字符串数据转换为bytes[],将其 Package 在MemoryStream中,并使用DataContractJsonSerializer进行反序列化:

string stringData = "[\"on4ThnU7\", \"n71YZYVKD\", \"CVfSpM2W\", \"10kQotV\"]";
string[] arrayData;
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(stringData)))
{
    var deserializer = new DataContractJsonSerializer(typeof(string[]));
    arrayData = deserializer.ReadObject(ms) as string[];
}
if (arrayData == null) 
    Console.WriteLine("Wrong data");
else
{
    foreach (var item in arrayData) 
        Console.WriteLine(item);
}
6ojccjat

6ojccjat3#

你可以使用Json。Net中,确保导入Newtonsoft.Json命名空间

using Newtonsoft.Json;

并反序列化JSON,如下所示

string json = @"[""on4ThnU7"",""n71YZYVKD"",""CVfSpM2W"",""10kQotV""]";
List<string> myStrings = JsonConvert.DeserializeObject<List<string>>(json);
foreach (string str in myStrings)
{
    Console.WriteLine(str);
}

输出

on4ThnU7
n71YZYVKD
CVfSpM2W
10kQotV

工作演示:https://dotnetfiddle.net/4OLS2v

oyxsuwqo

oyxsuwqo4#

好的我知道了
使用系统。Web.脚本.序列化;

public List<string> MyJsonDeserializer(string filename)
{
    //get json data
    Stream fs = new FileStream(filename, FileMode.Open);
    string jsonData = new StreamReader(fs).ReadToEnd();
    fs.Close(); 

    //deserialize json data to c# list
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return (List<string>)serializer.Deserialize(jsonData, typeof(List<string>));        
}
yhived7q

yhived7q5#

System. out. println();List stringList = serializer。sort〉(sort);

pbpqsu0x

pbpqsu0x6#

现代C#:System.Text.Json

自.NET Core 3。1 .NET附带了System.Text.Json命名空间,它允许JSON(反)序列化,而无需使用任何库。
关于Microsoft documentation
System.Text.Json命名空间提供了将JavaScript对象表示法(JSON)序列化和反序列化的功能。System.Text.Json库包含在的运行时中。NET Core 3.1及更高版本其他目标框架请安装**System.Text.Json NuGet包**。该软件包支持:

  • .NET Standard 2.0及更高版本
  • .NET Framework 4.7.2及更高版本
  • .NET Core 2.0、2.1和2。2

要反序列化,您需要使用您选择的适当类型,该类型可以保存多个值,如e。g IEnumerable<string>List<string>IReadOnlyCollection<string>等。最适合您需要的数据类型。
使用C# 11和。NET 7中,你现在可以使用原始字符串文字,这使得在代码中声明JSON更容易,更可读,你不需要转义每个"

using System.Text.Json;

var content = """
    [
      "on4ThnU7", 
      "n71YZYVKD", 
      "CVfSpM2W", 
      "10kQotV"
    ]
    """;
var serialized = JsonSerializer.Deserialize<IReadOnlyCollection<string>>(content);
foreach (var item in serialized)
{
    Console.WriteLine(item);
}

预期输出:

on4ThnU7
n71YZYVKD
CVfSpM2W
10kQotV

有关如何从Newtonsoft.Json迁移到System.Text.Json,请参阅Microsoft documentation

相关问题