C#对象扁平化为JSON结构

C#对象扁平化为JSON结构,c#,json,C#,Json,我正在制作一个有列表的模型 我需要将列表展平到一个JSON文件的主对象中 因此,我需要将其展平为: 例如: C#类模型如下: public string name { get; set; } public DateTime startDate { get; set; } public DateTime endDate { get; set; } public List<Resources> ResourcesList { get; set; } { "name":"Test

我正在制作一个有列表的模型

我需要将列表展平到一个JSON文件的主对象中

因此,我需要将其展平为: 例如:

C#类模型如下:

public string name { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public List<Resources> ResourcesList { get; set; }
{
    "name":"Test1",
    "startDate":"2020-06-06T00:00:00",
    "endDate":"2020-06-07T00:00:00",
    "ResourcesList": [
        {"Type":"assetId","Id":8},
        {"Type":"locationId","Id":10}
    ]
}
那么源的值将是:

new Resources { Type = "assetId", Id = 8 }
new Resources { Type = "locationId", Id = 10 }
您的问题是“将对象扁平化为JSON结构”

文章顶部的文本块不能作为JSON使用,所以让我们确保JSON是您想要的,因为它的作用是将对象存储为字符串(序列化),同时保留值和内部结构。可能是将对象保存在文件中,或者通过HTTP将其发送到服务器。无论哪种方式,您都可以这样做:

string jsonSerialize = JsonConvert.SerializeObject(classModelObject, Formatting.Indented);
现在它是一根绳子。日期、整数和浮点数都以字符串格式表示。你的看起来像这样:

public string name { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public List<Resources> ResourcesList { get; set; }
{
    "name":"Test1",
    "startDate":"2020-06-06T00:00:00",
    "endDate":"2020-06-07T00:00:00",
    "ResourcesList": [
        {"Type":"assetId","Id":8},
        {"Type":"locationId","Id":10}
    ]
}
如果您将该字符串存储到一个名为“class_model.json”的文件中,那么下面是如何将其转换回保留资源列表的ClassModel对象:

ClassModel classModel = JsonConvert.DeserializeObject<ClassModel>(jsonSerialize);
但是,如果您的预期应用程序与这两个方面都有很大的不同,请解释一下为什么您首先要使用JSON,以便我可以改进这个答案。

您的问题是“将对象扁平化为JSON结构”

文章顶部的文本块不能作为JSON使用,所以让我们确保JSON是您想要的,因为它的作用是将对象存储为字符串(序列化),同时保留值和内部结构。可能是将对象保存在文件中,或者通过HTTP将其发送到服务器。无论哪种方式,您都可以这样做:

string jsonSerialize = JsonConvert.SerializeObject(classModelObject, Formatting.Indented);
现在它是一根绳子。日期、整数和浮点数都以字符串格式表示。你的看起来像这样:

public string name { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public List<Resources> ResourcesList { get; set; }
{
    "name":"Test1",
    "startDate":"2020-06-06T00:00:00",
    "endDate":"2020-06-07T00:00:00",
    "ResourcesList": [
        {"Type":"assetId","Id":8},
        {"Type":"locationId","Id":10}
    ]
}
如果您将该字符串存储到一个名为“class_model.json”的文件中,那么下面是如何将其转换回保留资源列表的ClassModel对象:

ClassModel classModel = JsonConvert.DeserializeObject<ClassModel>(jsonSerialize);

但是,如果您的预期应用程序与上述任何一项都有很大的不同,请进一步解释为什么首先要使用JSON,以便我可以改进这个答案。

如果有一个源列表,您应该添加一个包含多个源的示例,或者明确声明只有一个source@TedBrownlow是的。它位于assetId的Type/Id和locations的底部。然后我需要将它展平到我文章中的第一个示例,而不是列表中。JSON是输出格式吗?顶部的代码片段不是JSON@TedBrownlow:是的,对不起,我刚刚复制了内部部分。基本上我已经试过了:
[JsonConverter(typeof(resourcecoverter))]public IList ScheduleEventResources{get;set;}=new List()因此,我想将列表中的所有内容与对象的ScheduleEventResource放在同一级别。@TedBrownlow:我也尝试过这篇文章,但它似乎无法满足我的需要:如果有一个源列表,您应该添加一个包含多个源的示例,或者明确声明只有一个source@TedBrownlow是的。它位于assetId的Type/Id和locations的底部。然后我需要将它展平到我文章中的第一个示例,而不是列表中。JSON是输出格式吗?顶部的代码片段不是JSON@TedBrownlow:是的,对不起,我刚刚复制了内部部分。基本上我已经试过了:
[JsonConverter(typeof(resourcecoverter))]public IList ScheduleEventResources{get;set;}=new List()所以我想将列表中的所有内容与对象的ScheduleEventResource放在同一级别。@TedBrownlow:我也试过这篇文章,但它似乎不能满足我的需要:不,不是这样。我想把它放在阵列外面。所以我不希望resourceList再出现在那里。我希望它显示
assetId:8
;以及
locationId:10
,并将其完全从资源列表中删除。这可能最适合作为Dictionary的Dictionary,因为属性的值需要是int,字符串应该是“assetId”和“locationId”。希望这有意义!不过,您对C#对象设置的想法是正确的。转换只需要在模型上进行,而不是在//展平部分。不,不是这样。我想把它放在阵列外面。所以我不希望resourceList再出现在那里。我希望它显示
assetId:8
;以及
locationId:10
,并将其完全从资源列表中删除。这可能最适合作为Dictionary的Dictionary,因为属性的值需要是int,字符串应该是“assetId”和“locationId”。希望这有意义!不过,您对C#对象设置的想法是正确的。转换只需要在模型上进行,而不需要在现有的//展平部分中进行。