在 C# 中返回对象的 JSON 数组

MAK*_*MAK 1 c# asp.net arrays json asp.net-core

这些是我拥有的类,它们代表了我希望向最终用户显示数据的方式:

    namespace PHCTimeSeriesInsights.API.Models
{
    public class ProductTimeSeries
    {
        public List<DeviceTimeSeries> DeviceTimeSeries { get; set; }
        public string DeviceId { get; set; }
    }

    public class DeviceTimeSeries
    {
        public DateTime TimeStamp { get; set; }
        public Double MeasuredValue { get; set; }
        public string DateField { get; set; }


    }
}
Run Code Online (Sandbox Code Playgroud)

我想要以下格式的输出:这里的字符串 8787887 是设备的实际值;

{
        "8787887":[ 
        {
        "prop":"val", 
        "prop":"val"
        },
       {
       "prop":"val1", 
       "prop":"val2"
}
    ]
    }
Run Code Online (Sandbox Code Playgroud)

我有这个片段代表我所做的,但它没有给我一个最佳格式:

List<ProductTimeSeries> prd = new List<ProductTimeSeries>();
            prd.Add(new ProductTimeSeries
            {
                DeviceId = getTelemetry.PropertyName,
                DeviceTimeSeries = deviceIdTimeSeries
            });
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

[
    {
        "deviceTimeSeries": [
            {
                "timeStamp": "2019-07-19T17:44:55.856Z",
                "measuredValue": 6.98,
                "dateField": "7/19/2019"
            },
            {
                "timeStamp": "2019-07-19T17:45:58.697Z",
                "measuredValue": 7.04,
                "dateField": "7/19/2019"
            }
        ],
        "deviceId": "deviceId"
    }
]
Run Code Online (Sandbox Code Playgroud)

我必须以我想要的方式对格式进行哪些更改?

nwe*_*all 5

在 C# 中,您希望实际使用字典而不是使用类。在你的情况下,应该使用工作Dictionary<string, List<DeviceTimeSeries>>,其中string就是你的“设备ID”。

请参阅下面的示例。

https://dotnetfiddle.net/luE1Z4

哪个排序运行

Console.WriteLine("Dictionary Test");
var productTimeSeries2 = new Dictionary<string, IList<DeviceTimeSeries>> () {
    {
        "DeviceId-888",
        new List < DeviceTimeSeries > () {
            new Program.DeviceTimeSeries() {
                TimeStamp = DateTime.Now,
                MeasuredValue = 2,
                DateField = "7/29/2019"
            }
        }
    }
};
Console.WriteLine(JsonConvert.SerializeObject(productTimeSeries2));
Run Code Online (Sandbox Code Playgroud)

和输出

{  
   "DeviceId-888":[  
      {  
         "TimeStamp":"2019-07-31T20:45:28.677905+00:00",
         "MeasuredValue":2.0,
         "DateField":"7/29/2019"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)