如何复用单个Services类生成1-10个服务以构建嵌套JSON?
解决思路:用单个Services类生成多服务嵌套JSON
核心结论
完全没问题!你根本不需要创建多个重复的Services、Services2类,只用一个Services类多次实例化就可以实现,你的思路方向是对的,只是当前的类结构设计需要调整——重复类完全是冗余的。
问题所在
你现在的Anlobject类里用了services、services2这类单独的属性,不仅导致类结构冗余,还会让生成的JSON是多个独立的服务字段,而不是更符合API规范的服务集合(数组/列表)。而且Services和Services2的结构完全一致,完全没必要重复定义。
修改后的代码实现
1. 调整类结构
把Anlobject里的单个服务属性改成List<Services>(或数组),只保留一个Services类:
public class Anlobject { public string alias { get; set; } public string address { get; set; } public string city { get; set; } public string customer_id { get; set; } public string property_id { get; set; } // 用List<Services>存储多个服务实例,灵活支持1-10个服务 public List<Services> services { get; set; } } // 只需要这一个类,重复实例化即可 public class Services { public string description { get; set; } public string shortname { get; set; } // 注意:你原代码里类定义是dates,但实例化用了orderdates,这里必须统一! public string[] dates { get; set; } }
2. 实例化多服务对象
修改CreateAnlobject方法,创建多个Services实例并加入列表:
private static Anlobject CreateAnlobject() { var obj = new Anlobject() { alias = "H02010", address = "Demoroad 9", city = "Demotown", customer_id = "727", property_id = "02010", services = new List<Services>() { new Services() { description = "Service1", shortname = "S1", dates = new string[] { "2020-01-01","2020-02-01"} }, new Services() { description = "Service2", shortname = "S2", dates = new string[] { "2020-01-01", "2020-02-01" } } // 这里可以继续添加更多Services实例,最多到10个,完全没问题 } }; return obj; }
3. 保持序列化代码不变
你的bTest_Click方法不需要修改,序列化后会生成符合预期的嵌套JSON:
{ "alias": "H02010", "address": "Demoroad 9", "city": "Demotown", "customer_id": "727", "property_id": "02010", "services": [ { "description": "Service1", "shortname": "S1", "dates": [ "2020-01-01", "2020-02-01" ] }, { "description": "Service2", "shortname": "S2", "dates": [ "2020-01-01", "2020-02-01" ] } ] }
额外提示
- 属性名一致性:你原代码里
Services类定义的是dates,但实例化时写了orderdates,这会导致序列化后该字段缺失,一定要保证类定义和实例化的属性名一致! - 特殊场景兼容:如果API要求的是
services1、services2这类单独字段而不是数组,那也可以用单个Services类实例化多个对象,分别赋值给Anlobject的services1、services2等属性,但这种结构不如数组灵活,一般API更推荐用数组表示多同类型对象。 - 动态控制数量:如果需要动态生成1-10个服务,可以用循环来创建
Services实例并加入列表,比如:services = new List<Services>(); for(int i=1; i<=5; i++) // 这里可以调整数量1-10 { services.Add(new Services() { description = $"Service{i}", shortname = $"S{i}", dates = new string[] { "2020-01-01", "2020-02-01" } }); }
内容的提问来源于stack exchange,提问作者Tomas H
相关产品推荐
相关产品推荐

