C# 如何序列化 JSON 对象数组并将对象名称转换为属性值

问题描述 投票:0回答:1

我有一个 JSON 字符串,其中包含一个对象数组。我需要序列化为 .NET 类并使用对象名称作为属性值。


public class DocumentFieldMap
    
{
        
    [Key]
        
    [JsonPropertyName("letterCode")]
        
    public string DocumentCode { get; set; }
        
    [JsonPropertyName("letterFields")]
        
    public List<DocumentField> DocumentFields { get; set; }
    
}

    
public class DocumentField
    
{
        
    [Key]
        
    public string FieldName { get; set; }
        
    public string DataSource { get; set; }
        
    public string ReadOnly { get; set; }
    
}
[
  {
    "letterCode": "RR",
    "letterFields": {
      "Name": {
        "DataSource": "",
        "ReadOnly": "true"
      },
      "Signature": {
        "DataSource": "",
        "ReadOnly": "false"
      }
    }
  }
]

我想将 letterFields 对象名称(例如 Name)序列化为 FieldName 属性,但我找不到一个好的示例。

c# json jsonserializer
1个回答
0
投票

可能最简单的方法是将其转换为另一个包含

Dictionary<string, ...>
的类。例如匿名类型:

var maps = new[]
{
    new DocumentFieldMap
    {
        DocumentCode = "code",
        DocumentFields =
        [

            new DocumentField
            {
                FieldName = "Name",
                DataSource = "",
                ReadOnly = "true"
            }
        ]
    }
};

var serialize = JsonSerializer.Serialize(maps.Select(m => new
{
    letterCode = m.DocumentCode,
    letterFields = m.DocumentFields
        .ToDictionary(f => f.FieldName, field => new { field.DataSource, field.ReadOnly })
}));

如果您愿意,可以从匿名类型切换到某些 DTO。

© www.soinside.com 2019 - 2024. All rights reserved.