比较WebApi中的两个对象HttpPost请求不起作用

时间:2017-08-24 06:43:24

标签: c# json asp.net-web-api

  

我将一个ProductBO对象发布到HttpPost服务,但比较时返回false。

我在运行时添加调试器和评估(QuickWatch)值,这两个类的所有其他成员都相等,但是当我比较product.Equals(testProduct)时,它返回false。我将数据传递为..

我使用 Postman in raw

传递数据
{
    "Id" :1, 
    "Name" : "Tomato Soup", 
    "Category" :"Groceries", 
    "Price" : 1
}

,文字类型为application/json。我做错了什么。以及这是否是更好的传递对象的方法。

     public IHttpActionResult GetTestProduct(ProductBO testProduct) {
        ProductBO product = new ProductBO { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 };
        if (product.Equals(testProduct)) //also tried for product == testProduct both return false
        {

            return Ok(product);
        }


        if (product.Id == testProduct.Id) 
        { 

        }
        if (product.Name.Equals(testProduct.Name))
        {
        }

        return Ok("working");
    }

2 个答案:

答案 0 :(得分:4)

对于引用类型,Equals方法比较对象引用,并返回false,因为testProductproduct指向内存中的2个不同地址。您可以在视图模型上实现IEquatable<T>接口,以指示如何执行比较:

public class ProductBO : IEquatable<ProductBO>
{
    public int Id { get; set; }

    public string Name { get; set; }

    public bool Equals(ProductBO other)
    {
        return this.Id == other.Id && this.Name == other.Name;
    }
}

答案 1 :(得分:1)

正如docs所说

  

如果当前实例是引用类型,则为Equals(Object)方法   测试参考相等性,并调用Equals(Object)方法   相当于对ReferenceEquals方法的调用。参考   等式意味着被比较的对象变量是指   同一个对象。

在您的情况下,您想要比较对象的内容而不是它们的引用。实现此目的的简单解决方案是将两个对象序列化为json并比较字符串

JsonConvert.SerializeObject(product) == JsonConvert.SerializeObject(testProduct)