我已经在这里待了几天,但却无法实现这一目标。我有一个遵循以下格式的YAML文件(注意我不能改变交付格式,因为它是外部的)。我选择了一个随机主题,但结构是一样的。
gender: male
age: 21
eyes: blue
lastLogins:
- 12/12/2016
- 14/12/2016
- 15/12/2016
addresses:
po011aa:
streetAddress: 1 the road
phoneNumber: 0118123123456
po21bb:
streetAddress: 1 another road
phoneNunder: 012345643556
hasPets: true
我在反序列化时创建了一个自定义类来包含这些数据。
类似的东西:
public class person
{
public string gender {get; set;}
public string age {get; set;}
public string eyes {get; set;}
public List<string> lastLogins {get; set;}
public addressList addresses {get; set;}
public string hasPets {get; set;}
}
public class addressList
{
public List<addressData> **QUESTION1** {get; set;}
}
public class addressData
{
public string postCost {get; set;} **QUESTION2**
public string streetAddress {get; set;}
public string phoneNumber {get; set;}
}
SO!
问题1:我可以使用什么名称,或者我如何使addressData列表接受任何名称。基本上接受它是因为它在结构中的位置而不是键的名称。
问题2:我想从容器中记录密钥名称&#39;将此addressData保存到addressData对象的邮政编码点。答案 0 :(得分:2)
提到@flyx时,您应该使用实现IDictionary<,>
的类来反序列化addresses
字段,因为它是映射。最简单的解决方案是删除addressList
类并改为使用Dictionary<string, addressData>
。
public class person
{
public string gender {get; set;}
public string age {get; set;}
public string eyes {get; set;}
public List<string> lastLogins {get; set;}
public Dictionary<string, addressData> addresses {get; set;}
public string hasPets {get; set;}
}
public class addressData
{
public string postCost {get; set;}
public string streetAddress {get; set;}
public string phoneNumber {get; set;}
}
或者,您可以addressList
实施IDictionary<string, addressData>
,但这样做会更有效。
hasPets
属性应该是bool
而不是字符串。
此外,您可能希望指定命名约定,以便您的类可以遵循标准的.NET约定:
var deserializer = new DeserializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
.Build();