You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将ActorRiskAssessments类序列化为无属性名的JSON数组?

问题:序列化类生成无属性名的JSON数组

目标类定义

public class ActorRiskAssessments
{        
    public string asOfDate { get; set; }
    public string type { get; set; }     
    public string value { get; set; }
    [JsonIgnore]
    public string id { get; set; }
    [JsonIgnore]
    public string pathParameter { get; set; }
} 

期望生成的JSON格式

[
  {
    "asOfDate": "2019-08-24",
    "type": "INTERNAL",
    "value": "string"
  }
]

当前代码逻辑

List<ActorRiskAssessments> actors = new List<ActorRiskAssessments>();

actors = (from DataRow dr in dataTable.Rows
          select new ActorRiskAssessments()
          {   
              id = dr["Actor.Id"].ToString(),
              asOfDate = DateTime.Now.ToString("yyyy-MM-dd"),
              type = dr["Actor.type"].ToString(),
              value = dr["Actor.value"].ToString(),
              pathParameter = lucinityURL + dr["pathParameter"].ToString()                             
          }
         ).ToList();

cnn.Open();

using (SqlCommand insertCommand = new SqlCommand(insertQuery, cnn))
{
    foreach (var serializer in actors)
    {
        json = JsonSerializer.Serialize(serializer);
        dtActorRiskAssessments.Rows.Add(new object[] { targetObject, serializer.id, json, serializer.pathParameter }); // add rows to DataTable                                                                                                                                 
    }

    var param = insertCommand.Parameters.AddWithValue("@ActorRiskAssessments", dtActorRiskAssessments);
    param.TypeName = "export.CorrespondenceTableType"; //DataType is required to register on MSSQL Site look a database project for this type
    insertCommand.ExecuteNonQuery();
    insertCommand.Parameters.Clear();
}

解决方案

场景1:将单个对象包裹为JSON数组(每行对应一个数组)

如果需要每行的json字段值是包含单个ActorRiskAssessments对象的数组,修改循环内的序列化逻辑,把当前对象放入临时列表后再序列化即可:

foreach (var serializer in actors)
{
    // 将单个对象存入列表再序列化,生成无属性名的数组格式
    json = JsonSerializer.Serialize(new List<ActorRiskAssessments> { serializer });
    dtActorRiskAssessments.Rows.Add(new object[] { targetObject, serializer.id, json, serializer.pathParameter });
}

场景2:将整个列表序列化为一个JSON数组(仅一行存储整个数组)

如果需要将所有对象合并成一个JSON数组并作为单个值插入数据库,可去掉循环,直接序列化整个actors列表:

// 序列化整个列表,直接得到无属性名的JSON数组
json = JsonSerializer.Serialize(actors);
// 插入单行数据,包含整个数组JSON
dtActorRiskAssessments.Rows.Add(new object[] { targetObject, null, json, null });

using (SqlCommand insertCommand = new SqlCommand(insertQuery, cnn))
{
    var param = insertCommand.Parameters.AddWithValue("@ActorRiskAssessments", dtActorRiskAssessments);
    param.TypeName = "export.CorrespondenceTableType";
    insertCommand.ExecuteNonQuery();
    insertCommand.Parameters.Clear();
}

说明

  • 你的ActorRiskAssessments类已经通过[JsonIgnore]标记了不需要序列化的字段,序列化时会自动忽略id和pathParameter,无需额外处理。
  • 使用JsonSerializer.Serialize(List<T>)时,默认会生成无外层属性名的纯数组格式,正好符合需求。

内容的提问来源于stack exchange,提问作者Michał Bryl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:05:22