Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用自定义格式将类对象序列化为JSON_C#_Json - Fatal编程技术网

C# 使用自定义格式将类对象序列化为JSON

C# 使用自定义格式将类对象序列化为JSON,c#,json,C#,Json,正在运行此程序 using System; using System.Text.Json; using System.Collections.Generic; namespace XmlConsoleApp { class Program { static void Main(string[] args) { CampaignAccountMap campaignAccountMap = new CampaignAcc

正在运行此程序

using System;
using System.Text.Json;
using System.Collections.Generic;

namespace XmlConsoleApp
{
    class Program
    { 
        static void Main(string[] args)
        {

            CampaignAccountMap campaignAccountMap = new CampaignAccountMap();

            CampaignAccountMapItem campaignAccountMapItem = new CampaignAccountMapItem();
            campaignAccountMapItem.CampaignId = @"dfdf-fdfdd-fdfd-dfdfd-dfdfd";
            campaignAccountMapItem.AccountIds.Add(1245345);
            campaignAccountMapItem.AccountIds.Add(1345675);

            campaignAccountMap.Campaigns.Add(campaignAccountMapItem);

            string jsonString = JsonSerializer.Serialize<CampaignAccountMap>(campaignAccountMap);
            Console.Write(jsonString);
        }

    }
}

class CampaignAccountMap
{
    public List<CampaignAccountMapItem> Campaigns { get; set; }
    public CampaignAccountMap()
    {
        Campaigns = new List<CampaignAccountMapItem>();
    }
}

class CampaignAccountMapItem
{
    public string CampaignId { get; set; }
    public List<int> AccountIds { get; set; }
    public CampaignAccountMapItem()
    {
        AccountIds = new List<int>();
    }
}
如何自定义序列化输出,使其生成此输出

{
  "dfdf-fdfdd-fdfd-dfdfd-dfdfd": [
    1245345,
    1345675
  ]
}
将类中属性的名称更改为JSON似乎可以使用消毒注释等,但我找不到任何这些名称是动态的示例,即我需要JSON输出中的键作为类中活动ID属性的动态值

如果需要的话,我也愿意不使用类来做这件事。

一种方法就是只使用字典

一种方法是只使用字典


所需的json格式可以用字典表示

因此,您可以向类中添加ToDictionary方法,如下所示:

class CampaignAccountMapItem
{
    public string CampaignId { get; set; }
    public List<int> AccountIds { get; set; }
    public CampaignAccountMapItem()
    {
        AccountIds = new List<int>();
    }

    public Dictionary<string, List<int>> ToDictionary()
    {
        return new Dictionary<string, List<int>> {{ CampaignId, AccountIds }};
    }
}

所需的json格式可以用字典表示

因此,您可以向类中添加ToDictionary方法,如下所示:

class CampaignAccountMapItem
{
    public string CampaignId { get; set; }
    public List<int> AccountIds { get; set; }
    public CampaignAccountMapItem()
    {
        AccountIds = new List<int>();
    }

    public Dictionary<string, List<int>> ToDictionary()
    {
        return new Dictionary<string, List<int>> {{ CampaignId, AccountIds }};
    }
}
class CampaignAccountMapItem
{
    public string CampaignId { get; set; }
    public List<int> AccountIds { get; set; }
    public CampaignAccountMapItem()
    {
        AccountIds = new List<int>();
    }

    public Dictionary<string, List<int>> ToDictionary()
    {
        return new Dictionary<string, List<int>> {{ CampaignId, AccountIds }};
    }
}
 string jsonString = JsonSerializer.Serialize(campaignAccountMapItem.ToDictionary());
 Console.Write(jsonString);