关键词:
【中文标题】JSON.Net 将集合序列化为数组数组【英文标题】:JSON.Net Serialize Collection To Array of Arrays 【发布时间】:2017-04-07 17:43:52 【问题描述】:默认情况下,DataTables Ajax 期望 JSON 数据是一个数组。
使用JSON.Net
是否可以通过属性/设置将集合序列化为数组数组而不是对象数组,或者是否必须通过自定义JsonConverter
来完成。我要序列化的对象如下:
public class DeviceIndex
public int Id get; set;
[Display(Name = "Asset Tag")]
public string AssetTag get; set;
[Display(Name = "Lease End")]
[DataType(DataType.Date)]
public DateTime LeaseEndDate get; set;
public string Type get; set;
[Display(Name = "Operating System")]
public string OperatingSystem get; set;
public string Model get; set;
而我的控制器动作如下:
public IActionResult IndexJson()
var model = _db.Devices.Select(d => new DeviceIndex ... ).ToList();
return Content(JsonConvert.SerializeObject(new data = model ), "application/json");
哪个输出 JSON:
"data": [
"Id": 1649,
...
,
"Id": 703,
...
]
虽然我想要的结果如下:
"data": [
[
"1649",
...
],
[
"703",
...
]
]
我以为我可以为我的集合使用 JsonArray 属性,但它看起来不会改变输出。
[JsonArray]
public class DevicesIndex: IEnumerable<DeviceIndex>
List<DeviceIndex> devices;
public IEnumerator<DeviceIndex> GetEnumerator()
return devices.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
return GetEnumerator();
【问题讨论】:
所以你需要json看起来像你的第一个json,一个数组对象的数组?如果是,您必须序列化 List> 这将是 json 作为数组字符串的数组。 与C# JSON.NET - Deserialize response that uses an unusual data structure 相似或重复。 【参考方案1】:您可以通过简单的方式实现它,只需使用此简单示例更新您的 IndexJson()
方法。
你需要序列化List<List<object>>
,试试这个示例。这是List<string>
的列表。
public IActionResult IndexJson()
List<List<string>> data = new List<List<string>>();
data.Add(new List<string>(new string[] "test1", "test2"));
data.Add(new List<string>(new string[] "test3", "test4"));
var json = JsonConvert.SerializeObject(new data = data);
return Content(json, "application/json");
你会得到这个 JSON
"data":[
["test1","test2"],
["test3","test4"]
]
使用您的数据模型
List<List<string>> data =new List<List<string>>();
List<DeviceIndex> deviceIndex = new List<DeviceIndex>();
DeviceIndex item = new DeviceIndex();
item.Id = 111;
item.AssetTag = "Tag";
item.LeaseEndDate = DateTime.Now;
item.Type = "Type";
item.OperatingSystem = "OS";
item.Model = "Model";
deviceIndex.Add(item);
deviceIndex.Add(item);
foreach (var device in deviceIndex)
data.Add(new List<string>(new string[] device.Id.ToString(), device.AssetTag, device.AssetTag, device.OperatingSystem ));
var json = JsonConvert.SerializeObject(new data= data );
JSON
"data":[
["111","Tag","Tag","OS"],
["111","Tag","Tag","OS"]
]
【讨论】:
您的第一个示例提供了所需的输出,但使用类的第二个示例没有。不应输出属性名称,并且所有值都应在数组中,而不是数组中的对象。【参考方案2】:看起来自定义JsonConverter
是建议的方法
public class DeviceIndexJsonConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(DeviceIndex);
public override object ReadJson(JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
throw new NotImplementedException();
public override void WriteJson(JsonWriter writer,
object value,
JsonSerializer serializer)
if (value == null) return;
writer.WriteStartArray();
var properties = value.GetType().GetProperties();
foreach (var property in properties)
writer.WriteValue(value.GetType().GetProperty(property.Name).GetValue(value));
writer.WriteEndArray();
【讨论】:
Json.NET:将嵌套数组反序列化为强类型对象
】Json.NET:将嵌套数组反序列化为强类型对象【英文标题】:Json.NET:deserializenestedarraysintostronglytypedobject【发布时间】:2012-10-1514:13:22【问题描述】:我正在编写客户端应用程序,它应该处理服务器响应。响应采用JSON格式。我决... 查看详情
如何使用 kotlinx 序列化将值数组反序列化为集合
】如何使用kotlinx序列化将值数组反序列化为集合【英文标题】:Howtodeserializeanarrayofvaluesintoacollectionusingkotlinxserialization【发布时间】:2021-03-2517:14:15【问题描述】:您好,我是kotlinx序列化的新手,我正在使用KMP,我的要求有点... 查看详情
使用 Json.NET 将异构 JSON 数组反序列化为协变 List<>
】使用Json.NET将异构JSON数组反序列化为协变List<>【英文标题】:DeserializingheterogenousJSONarrayintocovariantList<>usingJson.NET【发布时间】:2012-01-0416:45:07【问题描述】:我有一个JSON数组,其中包含具有不同属性的不同类型的对... 查看详情
使用 JSON.NET 一次序列化一组对象
】使用JSON.NET一次序列化一组对象【英文标题】:SerializinganarrayofobjectsoneatatimewithJSON.NET【发布时间】:2014-08-1023:44:08【问题描述】:我尝试将多个项目序列化为json,并将它们格式化为数组。它是基于事件的,因为它有很多数据... 查看详情
将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器
】将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器【英文标题】:Serializingc#collectiontojqueryarrayintheviewtopassthroughtheajaxmethodtocontroller【发布时间】:2021-04-0714:24:44【问题描述】:我有嵌套集合的视图模型。我想通过a... 查看详情
使用来自 URL 的 JSON.NET 反序列化 JSON 数组
】使用来自URL的JSON.NET反序列化JSON数组【英文标题】:DeserializeJSONArraywithJSON.NETfromURL【发布时间】:2016-10-0622:42:45【问题描述】:我是第一次使用json,在互联网上搜索后,我找到了JSON.NET。我认为它很容易使用,但我有一个问题... 查看详情
使用 Json.Net 转换为 XML 时如何序列化空数组
...换为XML,但是当我这样做时,它会删除所有空数组/列表/集合/等...如何让它将数组包含为空项?示例Json:"EmptyCollection":[],"OtherPorper 查看详情
使用变量名数组反序列化 JSON
】使用变量名数组反序列化JSON【英文标题】:DeserializeJSONwithvariablenamearrays【发布时间】:2015-03-1803:02:58【问题描述】:我正在获取从RESTWeb服务返回的JSON以用于调查响应。它具有一些名称值对的名称部分的数组。此外,名称将... 查看详情
JSON.NET 用空字符串序列化数组作为默认值
】JSON.NET用空字符串序列化数组作为默认值【英文标题】:JSON.NETserializearraywithemptystringfordefaultvalues【发布时间】:2019-10-2917:40:33【问题描述】:这样的数组:vararr=newobject[]0,string.Empty,null;由JSON.NET序列化为:[0,"",null]我需要强制JS... 查看详情
Newsoft JSON .NET 反序列化为 VB.net 中具有私有属性的对象
】NewsoftJSON.NET反序列化为VB.net中具有私有属性的对象【英文标题】:NewsoftJSON.NETDeserializingtoanObjectwithPrivatePropertiesinVB.net【发布时间】:2017-03-0215:14:33【问题描述】:我目前正在编写一个API,它从使用NewsoftJSON.NET库在VB.net中处理... 查看详情
一次反序列化json数组流一项
】一次反序列化json数组流一项【英文标题】:Deserializejsonarraystreamoneitematatime【发布时间】:2013-12-2020:43:51【问题描述】:我将一个大对象数组序列化为一个jsonhttp响应流。现在我想一次一个地从流中反序列化这些对象。是否有... 查看详情
使用 Json.net 将 JSON 对象反序列化为动态对象
】使用Json.net将JSON对象反序列化为动态对象【英文标题】:DeserializeJSONobjectintodynamicobjectusingJson.net【发布时间】:2011-05-3023:13:12【问题描述】:是否可以使用json.net从json反序列化返回动态对象?我想做这样的事情:dynamicjsonRespons... 查看详情
如何使用 Json.NET 将 XML 序列化为 JSON 对象
】如何使用Json.NET将XML序列化为JSON对象【英文标题】:HowtoSerializeXMLtoaJSONobjectwithJson.NET【发布时间】:2011-10-1506:11:59【问题描述】:我可以像这样将XML序列化为JSON字符串:varxml=newXmlDocument();xml.LoadXml("<person><name>John</na... 查看详情
将 JSON 反序列化为 C# 类,其中 JSON 中的属性名称是动态的
】将JSON反序列化为C#类,其中JSON中的属性名称是动态的【英文标题】:DeserializingJSONtoC#classwherepropertynamesintheJSONaredynamic【发布时间】:2021-11-0606:49:40【问题描述】:我正在使用JSON.NET包来反序列化对C#类的JSON响应,但json的格式... 查看详情
如何将向量序列化为字符数组
】如何将向量序列化为字符数组【英文标题】:Howtoserializeavectorintoanarrayofchars【发布时间】:2016-04-0910:55:08【问题描述】:我有一个向量定义为:std::vector<message*>消息在哪里:structmessagestaticunsignedintlast_id;unsignedintid;std::string... 查看详情
如何将列表序列化为字符数组
】如何将列表序列化为字符数组【英文标题】:Howtoserializealistintoanarrayofchars【发布时间】:2016-04-1220:38:28【问题描述】:我有一个列表定义为:list<Message*>g_messages;Message是:structMessagestaticunsignedints_last_id;stringuser_name;stringcont... 查看详情
Json.net 将数字属性序列化为字符串
】Json.net将数字属性序列化为字符串【英文标题】:Json.netserializenumericpropertiesasstring【发布时间】:2017-01-2408:41:39【问题描述】:我正在使用JsonConvert.SerializeObject序列化模型对象。服务器期望所有字段都是字符串。我的模型对象... 查看详情
如何将重复的 XML 元素序列化为数组?
】如何将重复的XML元素序列化为数组?【英文标题】:HowtoserializeduplicateXMLelementsintoanarray?【发布时间】:2021-11-1316:31:49【问题描述】:我正在尝试序列化一些格式不正确的XML。我特别在将重复元素转换为数组时遇到问题。在通... 查看详情