4 回答

TA貢獻1851條經驗 獲得超5個贊
一種方法是反序列化 Json 文件并將其存儲在數據類中。當 Json 文件轉換為包含信息的數據類對象列表時,可以使用 Linq 搜索屬性的給定值。
請參閱以下鏈接以反序列化 JSON 文件Deserialize Json From File。
Linq 查詢如下所示。
arrayList.where(w => w.propertyName == "value of string").select(s => s.propertyName).
.ToList()
如果您需要單個屬性,則可以使用 或 檢索匹配屬性的列表.First()
。
請注意,.First()
當找不到匹配值時會拋出異常??梢允褂?code>.FirstOrDefault(),這會返回一個空值,因為沒有匹配值。
使用該.FirstOrDefault()
方法時,您可以添加一個空檢查,如果找到了您要查找的值,就會顯示一條消息。

TA貢獻1856條經驗 獲得超5個贊
從這里:如何讀取嵌入式資源文本文件
您可以使用Assembly.GetManifestResourceStream方法:
使用 System.IO添加以下用法;使用 System.Reflection;
設置相關文件的屬性:Build Action
帶值的 參數Embedded Resource
使用以下代碼
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "MyCompany.MyProduct.MyFile.txt";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
}
resourceName是嵌入在 中的資源之一的名稱assembly。例如,如果您嵌入一個名為的文本文件"MyFile.txt",該文件位于具有默認命名空間的項目的根目錄中"MyCompany.MyProduct",則 resourceName 是"MyCompany.MyProduct.MyFile.txt".您可以使用 Assembly.GetManifestResourceNames 方法獲取程序集中所有資源的列表。
僅從文件名中獲取 resourceName 的明智之舉(通過命名空間的東西):
string resourceName = assembly.GetManifestResourceNames()
.Single(str => str.EndsWith("YourFileName.txt"));
之后,您可以使用這個或這個 (之前由用戶建議)來反序列化您的值。

TA貢獻1798條經驗 獲得超3個贊
我認為這是最干凈、最容易理解的解決方案:
public class Program
{
public class MappedObject
{
public string Name { get; set; }
public string Type { get; set; }
}
public static void Main(string[] args)
{
// search query
string searchFor = "Name1";
// our json
string jsonData = "[{\"Name\": \"Name1\",\"Type\": \"TypeA\"},{\"Name\": \"Name2\",\"Type\": \"TypeB\"}]";
// I'm mapping the json string into a list of MappedObject (s)
List<MappedObject> mappedObjects = JsonConvert.DeserializeObject<List<MappedObject>>(jsonData);
// I'm looping through this list to find the MappedObject
// that matches the searchFor search query string
foreach (MappedObject obj in mappedObjects)
{
if (obj.Name == searchFor)
{
// when I find it, I'll print the Type property
Console.WriteLine(obj.Type);
}
}
Console.ReadLine();
}
}
如果你想從外部資源讀取 json,比如.json你可以這樣做的文件:
public class Program
{
public class MappedObject
{
public string Name { get; set; }
public string Type { get; set; }
}
public static void Main(string[] args)
{
// search query
string searchFor = "Name1";
using (StreamReader r = new StreamReader("file.json"))
{
// our json read from file.json
string jsonData = r.ReadToEnd();
// I'm mapping the json string into a list of MappedObject (s)
List<MappedObject> mappedObjects = JsonConvert.DeserializeObject<List<MappedObject>>(jsonData);
// I'm looping through this list to find the MappedObject
// that matches the searchFor search query string
foreach (MappedObject obj in mappedObjects)
{
if (obj.Name == searchFor)
{
// when I find it, I'll print the Type property
Console.WriteLine(obj.Type);
}
}
}
Console.ReadLine();
}
}

TA貢獻1966條經驗 獲得超4個贊
聲明一個類來模仿您的 JSON 結構是一種選擇:
sealed class MyType
{
public string Name { get; set; }
public string Type { get; set; }
}
然后您將能夠在類型列表中反序列化它并根據給定名稱進行過濾
private static string FindType(string json, string name)
{
return JsonConvert.DeserializeObject<List<MyType>>(json)
.SingleOrDefault(nt => nt.Name == name)?
.Type ?? "No type found";
}
請注意,此方法會評估是否找不到具有給定名稱的記錄,在這種情況下,它會返回默認字符串。
如果要將此方法與資源文件一起使用:
static void Main(string[] args)
{
Console.WriteLine(FindType(FS.Properties.Resources.types, "Name1")); //prints "Type1
Console.WriteLine(FindType(FS.Properties.Resources.types, "name1")); //prints "No type found
Console.ReadKey();
}
- 4 回答
- 0 關注
- 154 瀏覽
添加回答
舉報