我循环遍历Umbraco节点列表并使用每个节点上的属性值设置我的类的属性
foreach (var node in listOfNodeWithProperty)
{
var faqProperties = new Faq
{
Question = node.GetPropertyValue<string>("question"),
Answer = node.GetPropertyValue<string>("answer"),
Schemes = node.GetPropertyValue<string>("schemes")
};
faqCollection.faqs.Add(faqProperties);
}
My Faq课程如下
internal class Faq
{
public string Question { get; set; }
public string Answer { get; set; }
public string Schemes { get; set; }
public IEnumerable<SchemeTypes> SchemeTypes { get; set; }
}
internal class SchemeTypes
{
public string SchemeType { get; set; }
}
对于字符串都是直接的,但是我想要填充SchemeTypes对象的值是逗号分隔的字符串。如何获取此字符串并创建一个数组来填充SchemeTypes?
我想将SchemeTypes作为对象,因为我的最终输出将是JSON
答案 0 :(得分:5)
听起来你只想将逗号和项目分成SchemeTypes
个对象:
SchemeTypes = node.GetPropertyValue<string>("schemeTypes")
.Split(',')
.Select(t => new SchemeTypes { SchemeType = t })
.ToList() // Materialize the result
我会提醒SchemaTypes
使用internal class SchemeType
{
public string Name { get; set; }
}
作为类型名称,但它代表单类型。我会考虑这样的事情:
IEnumerable<string>
如果你真的需要一个类,那就是这样。您可以在Faq
中拥有schemeTypes = [ "a", "b", "c" ]
属性,它会生成
schemeTypes = [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]
然而,你会得到额外的课程
IEnumerable<string>
您确定要进行后一种格式化吗?
如果您对属性string.Split
感到满意,可以坚持使用var faqProperties = new Faq
{
Question = node.GetPropertyValue<string>("question"),
Answer = node.GetPropertyValue<string>("answer"),
Schemes = node.GetPropertyValue<string>("schemes"),
SchemeTypes = node.GetPropertyValue<string>("schemeTypes").Split(',')
};
的结果:
"analysis":{
"char_filter": {
"latin_transform": {
"type": "mapping",
"mappings_path" : "serbian_mapping.txt"
}
},
"filter":{
"lemmagen_filter_sr":{
"type":"lemmagen",
"lexicon":"sr"
}
},
"analyzer":{
"lemmagen_lowercase_sr":{
"filter":[
"lemmagen_filter_sr",
"lowercase"
],
"char_filter": ["latin_transform"],
"type":"custom",
"tokenizer":"standard"
}
}
}
答案 1 :(得分:3)
你的意思是这个吗?:
new Faq
{
Question = node.GetPropertyValue<string>("question"),
Answer = node.GetPropertyValue<string>("answer"),
Schemes = node.GetPropertyValue<string>("schemes"),
SchemeTypes = node.GetPropertyValue<string>("schemetypes")
.Split(',')
.Select(s => new SchemeType { SchemeType = s })
}
基本上只需使用.Split()
将逗号分隔的字符串转换为集合,然后.Select()
将该集合投影到所需类型的新集合中。