[英]How to check if an item exist in list and has value
我有一个 model 类,如下所示
public class A
{
public string Name{get;set;}
public string Value{get;set;}
}
public class B
{
public List<A>Items{get;set;}
}
下面的 json 将被反序列化为 class B
{
"Items":[
{
"Name":"Food Name"
"Value":"Fries"
},
{
"Name":"Weapon Name"
"Value":"Gun"
},
{
"Name":"Vehicle Name"
"Value":"Car"
},
{
"Name":"Pet Name"
"Value":"Mewto"
},
{
"Name":"Personal Name"
"Value":"Leo"
}]}
将值反序列化为 class B 后,我需要验证列表项是否包含名称食物名称、个人名称、武器名称和汽车名称,并且这些提到的项目的值不是 null 或空。 最好的方法是什么?
尝试这个
var jsonParsed=JsonConvert.DeserializeObject<B>(json);
var names =new string[] {"Food Name","Personal Name","Weapon Name","Car Name" };
var valid= jsonParsed.Items.Where(i=> names.Contains(i.Name) && !string.IsNullOrEmpty(i.Value))
.GroupBy(i=>i.Name).Count()==names.Length;
或者如果它只能是每个名称的一项,它可以更简单
var valid= jsonParsed.Items.Count(i=> names.Contains(i.Name) && !string.IsNullOrEmpty(i.Value))==names.Length;
你可以用 go 来做类似的事情
List<A> Items = //however you get the list
string[] names = {"Food Name","Personal Name","Weapon Name", "Car Name"};
foreach (string s in names)
{
var item = Items.FirstOrDefault(i => i.Name == s);
if (item == null || String.IsNullOrWhiteSpace(item.Value))
{
// handle the missing data
break;
}
}
这可能是一个丑陋的解决方案,但它应该工作。 另请注意,这不会检查列表中的任何其他项目。 您可以拥有一个Name
为George
且Value
为Potato
的项目,只要您还拥有名称正确的项目即可。
看起来你有很多可靠的解决方案。 我做了类似萨米的事情。 由于您要反序列化为 B,因此我创建了 List 来表示它。 不是最优雅的,但它有效。 希望你能找到适合你的东西
//Sample list
var newB = new B
{
Items = new List<A>
{
new A{Name = "Food Name", Value = "Fries" },
new A{Name = "Weapon Name", Value = "Gun" },
new A{ Name = "Weapon Name", Value = "" },
}
};
foreach (var item in newB.Items)
{
string[] vals = { item.Name, item.Value };
if (String.IsNullOrEmpty(vals[0]) || String.IsNullOrEmpty(vals[1]))
{
//Handle missing vals
Console.WriteLine("We have a missing val");
}
else
{
Console.WriteLine("Good to go");
}
}
string[] mandatoryNames = { "Food Name", "Personal Name", "Weapon Name", "Car Name" };
var valid = mandatoryNames
.All(mandatoryName => items
.Any(item => item.Name == mandatoryName
&& !string.IsNullOrEmpty(item.Value)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.