C# 如何验证JSON请求中的重复键值

C# 如何验证JSON请求中的重复键值,c#,asp.net-core,asp.net-core-webapi,C#,Asp.net Core,Asp.net Core Webapi,如何验证两个不同项目id相同的动态字段?我需要显示验证消息,说明不允许重复的动态字段 我已经做了一些RND,但是我发现JSON密钥重复,但是我需要检查键值重复。这里是一个检查JSON数据的演示 型号: { "number": 1165, "lineItems": [{ "itemId": 1, "dynamicfields": { "styleId": &quo

如何验证两个不同项目id相同的动态字段?我需要显示验证消息,说明不允许重复的动态字段


我已经做了一些RND,但是我发现JSON密钥重复,但是我需要检查键值重复。

这里是一个检查JSON数据的演示

型号:

{
  "number": 1165,
  "lineItems": [{
    "itemId": 1,
    "dynamicfields": {
      "styleId": "V-Neck",
      "style": "T-SHIRTS",
      "cost": 30
    }
  },
  {
    "itemId": 2,
    "dynamicfields": {
      "styleId": "V-Neck",
      "style": "T-SHIRTS",
      "cost": 30
    }
  }]
}
公共类模型B{
公共整数{get;set;}
公共列表行项目{get;set;}
}
公共类行项目
{
公共int itemId{get;set;}
公共动态字段动态字段{get;set;}
}
公共类动态字段{
公共字符串styleId{get;set;}
公共字符串样式{get;set;}
公共整数成本{get;set;}
}
行动:

public class ModelB{
        public int number { get; set; }
        public List<LineItem> lineItems { get; set; }
    }
    public class LineItem
    {
        public int itemId { get; set; }
        public Dynamicfields dynamicfields { get; set; }

    }
    public class Dynamicfields {
        public string styleId { get; set; }
        public string style { get; set; }
        public int cost { get; set; }
    }
公共字符串检查重复([FromBody]ModelB ModelB)
{
对于(int i=0;iJsonConvert.SerializeObject(l.dynamicfields)==JsonConvert.SerializeObject(modelB.lineItems[i].dynamicfields)).Count()>1)
{
返回“不允许重复的动态字段”;
}
}
返回“”;
}
结果:

如果您获得jsondata,可以使用以下方法将其转换为ModelB:

 public string CheckRepeat([FromBody]ModelB modelB)
        {

            for (int i = 0; i < modelB.lineItems.Count() - 1; i++)
            {
                if (modelB.lineItems.Where(l => JsonConvert.SerializeObject(l.dynamicfields) == JsonConvert.SerializeObject(modelB.lineItems[i].dynamicfields)).Count() > 1)
                {
                    return "duplicate dynamic fields should not allow";
                }
            }
            return "";
        }
modelbmodelb=JsonConvert.DeserializeObject(jsondata);

这是ASP.NET核心还是ASP.NET(框架)。请适当标记。您必须更好地定义您的要求。究竟什么是“重复动态字段”?您的意思是,由于itemId 1的所有字段都在itemId 2中重复,因此此有效负载应该给出一个错误吗?和/或他们的价值观?这将需要自定义验证。这需要工作,问题是模糊和不明确的,您是对的@CodeCaster,它必须给出错误,因为itemId 2中存在itemId 1的所有字段。它已检查itemId 1和itemId 2的所有字段。反序列化,获取所有不重复的项。对unic字段进行分组和计数。如果其中一个大于1,则可以显示所需内容。
ModelB modelB=JsonConvert.DeserializeObject<ModelB>(jsondata);