json 如何序列化包含结构列表的类的对象列表

wa7juj8i  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个由简单属性组成的类的对象列表和一个结构列表的属性

struct UGdata
{
    public int ID;
    public float curGen;
    public float nomGen;
}
internal class PlantData
{
    public float Level {get;set;}
    public string UGName {get;set;}
    public List<UGData> UGs {get;set;}
}

字符串
在我的代码中,我用sqlserver信息填充数据,我有这样的东西:

List<PlantData> MyData = new List<PlantData>
for(int i=0; i<n; i++)
{    
     PlantData info = new PlantData();
     for(int j=0; j<m;j++)
     {
        UGData data = new UGData();
        //fill the UG data properties
        info.UGs.Add(data)
        //fill other info properties
     }
     MyData.Add(info)
}


最后我想把这些信息序列化:(我使用System.Texts.Json)

string Jsonoutput = JsonSerializer.Serialize(MyData)


输出来自没有结构体信息,像这样:

{
    "Level":10
    "UGName":A
    "UGs": []
},
{
    "Level":30
    "UGName":B
    "UGs": []
}


我必须为这个结构写一个特定的序列化器吗?我读了一些类似的选项的线程,但我无法取得任何进展。有什么想法吗?非常感谢!

rvpgvaaj

rvpgvaaj1#

默认情况下,System.Text.Json不会序列化字段。您需要使用属性:

struct UGdata
{
    public int ID { get; set; }
    public float curGen { get; set; }
    public float nomGen { get; set; }
}

字符串
或者通过序列化程序选项显式包含字段:

string jsonOutput = JsonSerializer.Serialize("MyData", new JsonSerializerOptions
{
    IncludeFields = true
});


或者通过用相应的属性标记字段。

struct UGdata
{
    [JsonInclude]
    public int ID;
    [JsonInclude]
    public float curGen;
    [JsonInclude]
    public float nomGen;
}

相关问题