2017-08-24 87 views
1

我将ProductBO对象发布到HttpPost服务,但是当比较它时返回false。比较WebApi中的两个对象HttpPost请求不起作用

我添加调试器和评估(快速监视)值的在运行时,这两个类的所有其他成员都是平等的,但是当我比较product.Equals(testProduct)它retuns假的。我将数据作为..

我传递使用邮差数据在原始

{ 
    "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"); 
    } 

回答

5

对于引用类型,该方法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; 
    } 
} 
0

由于docs

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

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

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