在逗号分隔的字符串中设置C#中的对象

时间:2018-04-30 17:03:04

标签: c#

我循环遍历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

2 个答案:

答案 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" ] 属性,它会生成

的JSON
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()将该集合投影到所需类型的新集合中。