【问题标题】:How to return a string array with complex structure in c#如何在c#中返回结构复杂的字符串数组
【发布时间】:2021-06-21 05:41:27
【问题描述】:

对于遗留系统,我需要返回一个对象,而不是在其中包含一个键值而不是日期,并且内部有一个主体,知道如何完成工作吗?

我需要返回这个数组

{
"sellerId":"157747190185796800",
 "data":
 { 
  "2020-08-25":{ "sales":195000,"comission":25350},
  "2020-08-26":{"sales":70500,"comission":9165},
  "2020-08-27":{ "sales":51000,"comission":6630}
 } 
}
   

我正在尝试使用 json 结果,它可以工作,但是键值日期有问题

编辑:我正在尝试提出字典的建议,但是,我不知道在这种情况下我做错了什么。我也尝试作为一个对象,但不起作用。

    var lst = new List<Dictionary<string, JsonResult>>();

    foreach (var item in listToReturn)
    { 

        lst.Add(new Dictionary(item.DateFromStr, new JsonResult (new
        {
            sales = item.sales,
            comission = item.Comission,
        })));
         
    }

【问题讨论】:

  • 也许你可以考虑使用Dictionary来数据。
  • 请修正第二个代码 sn-p 中的缩进。不可读。
  • 当属性名称为 int 或 datetime 等值时。它暗示它是一本字典。但为什么一切都是匿名类型? json 的 DTO 是这样的负担吗?您可以通过简单的复制过去来创建它们。
  • 这能回答你的问题吗? How to auto-generate a C# class file from a JSON string。将预期结果粘贴到工具app.quicktype.io 将生成类。并且需要.ToString("yyyy-MM-dd") 将日期时间转换为这种格式。
  • Em...不,格式字符串不是问题...日期以正确格式出现在字符串中,问题是如何显示该值并从该值创建一个正文使用普通的 json

标签: c# arrays json


【解决方案1】:

我会使用匿名对象创建 JSON,使用字典来存储销售数据,如下所示:

var resultToReturn = new 
{
    sellerId,
    data = listToReturn.ToDictionary (
        item => item.DateFromStr,
        item => new 
        { 
            sales = item.Sales, 
            commission = item.Commission 
        }
    )
};

然后您可以使用您最喜欢的序列化程序对resultToReturn 进行序列化,或者如果您使用的是 MVC,请将其返回到 JsonResult

演示小提琴:https://dotnetfiddle.net/jZvoNo

注意:此解决方案假定所有日期值在列表中都是唯一的,否则ToDictionary 将引发异常。

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2020-03-23
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多