C#LINQ搜索字符串数组

时间:2017-04-27 13:39:14

标签: c# linq unity3d

我有一些json我存储在一个名为jsonString的字符串数组中。我想通过搜索其元键>将项目拉入统一游戏对象。值并返回meta_value>值。

这是json代码中的一个片段来解释:

[
 {
    "meta_key": "contact-email",
    "meta_value": "info@test.com"
},
{
    "meta_key": "contact_web",
    "meta_value": "http:\/\/www.google.com"
},
{
    "meta_key": "Services_count",
    "meta_value": "1"
},
{
    "meta_key": "Services_rating",
    "meta_value": "4"
},
{
    "meta_key": "Price_count",
    "meta_value": "1"
   }
]

在场景中,我有一个带有文本ui元素的游戏对象。

在C#脚本中,我使用了www请求来加载存储在名为jsonString的字符串中的文本。

如果我尝试调试,这可行。

       (LitJSON DLL)
       private JsonData itemData;

        itemData = JsonMapper.ToObject(jsonString);
        Debug.Log(itemData[2]["meta_value"]);

所以我可以将它分配给游戏对象上的文本元素。

问题是这个效率非常低,因为json文件可以更改,所以我永远不会知道从中提取信息的正确行。

我想做什么:

  string email = returnValue("contact-email");

然后

private string returnValue(string what){
    //Check the array by the meta keys and then give me the value of the meta value for that item.
 return foundItem;
}

如果我没有非常清楚地解释它,请道歉。基本上,如何使用密钥作为搜索项来查找正确的值?

3 个答案:

答案 0 :(得分:4)

你可以写

type StructA struct {
    varA string
    varB string
    varC string
}    


type StructB struct {
    foo  []StructA
}

根据结构中的特定键查找值。

答案 1 :(得分:2)

如果您一遍又一遍地进行操作,可以将其转换为字典:

var dict = itemData.ToDictionary(x => x.meta_key, x => x.meta_value);

并像这样使用它:

var meta_value = dict[what];

what是您正在寻找的关键。

答案 2 :(得分:0)

尝试将JSON反序列化为对象,如:

class MetaObject
{
    string meta_key { get; set; }
    string meta_value { get; set; }
}
class Settings
{
    IEnumerable<MetaObject> MetaObjects { get; set; }
    string GetValueOfProp(string PropName){
        ...
    }
}

Here you can read more about it