关键词:
【中文标题】将列表序列化为 JSON【英文标题】:Serializing a list to JSON 【发布时间】:2012-02-25 00:18:20 【问题描述】:我有一个如下所示的对象模型:
public MyObjectInJson
public long ObjectID get;set;
public string ObjectInJson get;set;
属性ObjectInJson
是一个已经序列化的版本,是一个包含嵌套列表的对象。目前,我正在手动序列化MyObjectInJson
的列表,如下所示:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
TheListBuilder.Append(",");
TheListBuilder.Append("]");
return TheListBuilder.ToString();
我想知道我是否可以用JavascriptSerializer
替换这种危险代码并获得相同的结果。
我该怎么做?
【问题讨论】:
注意,在WPF项目中,需要添加对System.Web.Extensions
的引用才能使用System.Web.Script.Serialization
:***.com/a/18746092/1599699***.com/a/19299695/1599699
【参考方案1】:
如果使用 .Net Core 3.0 或更高版本;
默认使用内置的System.Text.Json
解析器实现。
例如
using System.Text.Json;
var json = JsonSerializer.Serialize(aList);
另外,还可以使用其他不太主流的选项,例如 Utf8Json parser 和 Jil:它们可能会提供 superior performance,如果您确实需要它,但您需要安装它们各自的包。
如果使用 .Net Core 2.2 或更早版本卡住;
默认使用 Newtonsoft JSON.Net 作为您的首选 JSON 解析器。
例如
using Newtonsoft.Json;
var json = JsonConvert.SerializeObject(aList);
您可能需要先安装软件包。
PM> Install-Package Newtonsoft.Json
更多详情see and upvote the answer that is the source of this information。
仅供参考,这是多年前的原始答案;
// you need to reference System.Web.Extensions
using System.Web.Script.Serialization;
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(aList);
【讨论】:
啊,好吧,它还序列化对象列表,而不仅仅是对象本身。谢谢。 不喜欢周期性关系,但这不是问题 请注意,这个命名空间巧妙地隐藏在 System.Web.Extensions 中。将其添加为参考后,该解决方案将非常有效! 我看到你编辑的答案,真希望我有一个更新的例子。 @IamNumber5 已在其他答案中提供。无论如何,我扩展了我的答案。【参考方案2】:您也可以使用 Json.NET。只需在http://james.newtonking.com/pages/json-net.aspx 下载它,解压压缩文件并将其添加为参考。
然后只需使用以下命令序列化列表(或任何您想要的对象):
using Newtonsoft.Json;
string json = JsonConvert.SerializeObject(listTop10);
更新:您还可以通过 NuGet 包管理器(工具 --> NuGet 包管理器 --> 包管理器控制台)将其添加到您的项目中:
PM> Install-Package Newtonsoft.Json
文档:Serializing Collections
【讨论】:
【参考方案3】:使用内置 JSON 序列化程序有两种常用方法:
JavaScriptSerializer
var serializer = new JavaScriptSerializer();
return serializer.Serialize(TheList);
DataContractJsonSerializer
var serializer = new DataContractJsonSerializer(TheList.GetType());
using (var stream = new MemoryStream())
serializer.WriteObject(stream, TheList);
using (var sr = new StreamReader(stream))
return sr.ReadToEnd();
请注意,此选项需要为您的类定义数据协定:
[DataContract]
public class MyObjectInJson
[DataMember]
public long ObjectID get;set;
[DataMember]
public string ObjectInJson get;set;
【讨论】:
【参考方案4】:public static string JSONSerialize<T>(T obj)
string retVal = String.Empty;
using (MemoryStream ms = new MemoryStream())
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
serializer.WriteObject(ms, obj);
var byteArray = ms.ToArray();
retVal = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
return retVal;
【讨论】:
【参考方案5】:.NET 从 3.5 版开始已经通过 System.Runtime.Serialization.Json namespace 和 DataContractJsonSerializer 类支持基本的 Json 序列化。顾名思义,DataContractJsonSerializer 会考虑您添加到对象的任何数据注释以创建最终的 Json 输出。
如果您已经有想要将 Json 序列化为流的注释数据类,这会很方便,如 How To: Serialize and Deserialize JSON Data 中所述。有一些限制,但如果您有基本需求并且不想将另一个库添加到您的项目中,它已经足够好且足够快了。
以下代码将一个列表序列化到控制台输出流。如您所见,它比 Json.NET 更冗长位,而且不是类型安全的(即没有泛型)
var list = new List<string> "a", "b", "c", "d";
using(var output = Console.OpenStandardOutput())
var writer = new DataContractJsonSerializer(typeof (List<string>));
writer.WriteObject(output,list);
另一方面,Json.NET 可以更好地控制生成 Json 的方式。当您必须将 javascript 友好的名称映射到 .NET 类、将日期格式化为 json 等时,这将非常方便。
另一个选项是ServiceStack.Text,它是ServicStack ... 堆栈的一部分,它为Json、JSV 和CSV 提供了一组非常快速的序列化程序。
【讨论】:
【参考方案6】:如果您在 asp.Net Core API 操作的上下文中执行此操作,则会隐式完成到 Json 的转换。
[HttpGet]
public ActionResult Get()
return Ok(TheList);
【讨论】:
在我的情况下它没有序列化 @Gilboot 它在做什么? 没关系,我漏掉了 get;放; 关于财产。我是一名初学者 C# 程序员。还是谢谢【参考方案7】:基于另一个帖子的答案。我想出了一个更通用的方法来构建一个列表,利用 Json.NET 版本 12.x 的动态检索
using Newtonsoft.Json;
static class JsonObj
/// <summary>
/// Deserializes a json file into an object list
/// Author: Joseph Poirier 2/26/2019
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fileName"></param>
/// <returns></returns>
public static List<T> DeSerializeObject<T>(string fileName)
List<T> objectOut = new List<T>();
if (string.IsNullOrEmpty(fileName)) return objectOut;
try
// reading in full file as text
string ss = File.ReadAllText(fileName);
// went with <dynamic> over <T> or <List<T>> to avoid error..
// unexpected character at line 1 column 2
var output = JsonConvert.DeserializeObject<dynamic>(ss);
foreach (var Record in output)
foreach (T data in Record)
objectOut.Add(data);
catch (Exception ex)
//Log exception here
Console.Write(ex.Message);
return objectOut;
调用进程
string fname = "../../Names.json"; // <- your json file path
// for alternate types replace string with custom class below
List<string> jsonFile = JsonObj.DeSerializeObject<string>(fname);
或者这个调用来处理
string fname = "../../Names.json"; // <- your json file path
// for alternate types replace string with custom class below
List<string> jsonFile = new List<string>();
jsonFile.AddRange(JsonObj.DeSerializeObject<string>(fname));
【讨论】:
【参考方案8】:using System;
using System.Text.Json;
using System.Collections.Generic;
public class Program
public static void Main()
List<ErrorDetail> aList = new List<ErrorDetail>();
ErrorDetail a = new ErrorDetail ColumnName="aaa", ErrorText="abbbb";
ErrorDetail c = new ErrorDetail ColumnName="ccc", ErrorText="cccc";
ErrorDetail b = new ErrorDetail ColumnName="ccc", ErrorText="cccc";
aList.Add(a);
aList.Add(b);
aList.Add(c);
var json = JsonSerializer.Serialize(aList);
Console.WriteLine(json);
public class ErrorDetail
public string ColumnName get; set;
public string ErrorText get; set;
【讨论】:
["ColumnName":"aaa","ErrorText":"abbbb","ColumnName":"ccc","ErrorText":"cccc","ColumnName": "ccc","ErrorText":"cccc"]Jackson 将列表序列化为 xml 和 json
】Jackson将列表序列化为xml和json【英文标题】:Jacksonserializelisttoxml&json【发布时间】:2021-12-1001:28:02【问题描述】:我有一个要序列化为json和XML的类:@JacksonXmlRootElement(localName="devices")classDeviceWrapper//<--thisclassisintendedtoprovider... 查看详情
无法将 python 列表序列化为 json
】无法将python列表序列化为json【英文标题】:Unabletoserialisepythonlisttojson【发布时间】:2020-03-1522:45:15【问题描述】:[\'topleft\':\'x\':34,\'y\':13,\'confidence\':0.17681329,\'bottomright\':\'x\':398,\'y\':347,\'label\':\'person\',\'topleft\':\' 查看详情
将 json 反序列化为匿名类型列表
】将json反序列化为匿名类型列表【英文标题】:deserializejsonintolistofanonymoustype【发布时间】:2012-08-0522:33:48【问题描述】:我有一个json如下:"["a":"b","c":"d","a":"e","c":"f","a":"g","c":"h"]"现在我想将其反序列化为匿名类型“foo”的对... 查看详情
将特定 JSON 字段反序列化为 Unity 中的对象列表
】将特定JSON字段反序列化为Unity中的对象列表【英文标题】:DeserializingspecificJSONfieldsintoalistofobjectsinUnity【发布时间】:2021-09-0907:03:07【问题描述】:对于个人项目,我正在尝试将大型Json数组反序列化为对象列表,但是在遵循其... 查看详情
将json反序列化为键值对列表[重复]
】将json反序列化为键值对列表[重复]【英文标题】:DeserializejsontolistofKeyValuepairs[duplicate]【发布时间】:2018-10-2102:44:48【问题描述】:我有以下json:["key":"key1","value":"val1","key":"key2","value":"val2"]如何将其反序列化为NameValuePair<... 查看详情
使用 datagridview 将列表序列化为现有的 .Json 文件
】使用datagridview将列表序列化为现有的.Json文件【英文标题】:Serializelisttoanexisting.Jsonfile,usingadatagridview【发布时间】:2021-12-2912:25:03【问题描述】:我有一个反序列化的json文件直接输出到DGV,并且在DGV中对最终用户可见。当他... 查看详情
将对象列表序列化为没有父对象名称的 JSON
】将对象列表序列化为没有父对象名称的JSON【英文标题】:SerializeobjectslisttoJSonwithoutParentobjectname【发布时间】:2019-03-0106:52:19【问题描述】:我有对象列表并在我的MVC应用程序中使用下面的代码输出它们。publicJsonResultConversionIn... 查看详情
将 JSON 对象反序列化为 .NET HashSet 和列表失败
】将JSON对象反序列化为.NETHashSet和列表失败【英文标题】:DeserializeJSONobjectas.NETHashSetandListsFailed【发布时间】:2021-07-1422:56:14【问题描述】:我有这种想要保存的Json:"data":"importMannerTypeList":"importMannerTypeID":5,"importMannerTypeDesc":"a",... 查看详情
Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表
...nsoftJson将字典反序列化为来自DataContractJsonSerializer的键/值列表【英文标题】:NewtonsoftJsonDeserializeDictionaryasKey/ValuelistfromDataContractJsonSerializer【发布时间】:2015-04-1116:25:57【问题描述】:我有一个使用DataContractJsonSerializer序列化到... 查看详情
如何将 django/python 中的模型对象列表序列化为 JSON
】如何将django/python中的模型对象列表序列化为JSON【英文标题】:HowtoserializetoJSONalistofmodelobjectsindjango/python【发布时间】:2012-10-1310:06:44【问题描述】:我正在尝试序列化定义为的模型对象列表:classAnalysisInput(models.Model):input_user... 查看详情
我正在尝试使用 .NET 3.1 将 JSON 反序列化为对象列表
】我正在尝试使用.NET3.1将JSON反序列化为对象列表【英文标题】:IamtryingtodeserializeaJSONintoalistofobjectsusing.NET3.1【发布时间】:2021-12-1020:03:34【问题描述】:我有以下Json:"Id":"2727","Region":"US","Data":["Title":"Director","JobDescription":"Coordin... 查看详情
将复杂的 json 文件反序列化为 POJO - 作为一个列表元素工作,或者不作为
】将复杂的json文件反序列化为POJO-作为一个列表元素工作,或者不作为【英文标题】:DeserializingcomplexjsonfileintoaPOJO-workseitherasonelistelement,ordoesn\'t【发布时间】:2019-08-2111:17:03【问题描述】:我正在尝试将此json反序列化为POJO类,... 查看详情
C# JSON 将文件反序列化为对象列表失败,并将字符串转换为集合错误
】C#JSON将文件反序列化为对象列表失败,并将字符串转换为集合错误【英文标题】:C#JSONdeserializeafileintoobjectlistfailswithconvertStringtoCollectionerror【发布时间】:2021-11-0821:21:14【问题描述】:我有一个学校的小项目,我们在这里处理... 查看详情
将 JSON 命名属性反序列化为 .Net 对象
...对象数组的属性。我想我想将这部分反序列化为一个.Net列表,问题是数组中的每个对象都带有一个名称,所以我无法将它作为一个列表。这是有效载荷:"ShipAction":"GetQuo 查看详情
Symfony - 将 json 反序列化为实体数组
...通过getAPI调用收到的json对象。我进行此调用以接收对象列表。这是一个帖子列表......所以我有一个帖子对象数组。这里是输出:"total":2,"data":["id":2,"user":"id":1,"usern 查看详情
使用 .NET 4.0 任务模式使用 HTTPClient .ReadAsAsync 将 JSON 反序列化为数组或列表
...T4.0任务模式使用HTTPClient.ReadAsAsync将JSON反序列化为数组或列表【英文标题】:DeserializeJSONtoArrayorListwithHTTPClient.ReadAsAsyncusing.NET4.0Taskpattern【发布时间】:2014-06-1000:27:49【问题描述】:我正在尝试使用.NET4.0任务模式反序列化从http:/... 查看详情
如何将json序列化为sql?
...发布时间】:2022-01-1805:54:41【问题描述】:我有一个单词列表,我应该向API发送请求并获取有关单词的信息。我想在Django中将JSON格式的API数据转换为SQL(我的数据库是PostgreSQL)格式。我怎样才能做到这一点?你知道任何学习将j... 查看详情
使用springboot将json反序列化为带有通用对象列表的pojo
...数据,然后列出搜索到的对象。我正在尝试使用通用对象列表来实现这一点我没有测试过这些类,所有内容都完全符合我的要求。testsearch.JavapublicclassTestSearch<T>{privateStringcount;privateList<T>resul 查看详情