2017-08-24 6 views
1

ProductBOオブジェクトをHttpPostサービスに送信しますが、比較するとfalseになります。WebApiの2つのオブジェクトの比較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方法は、オブジェクト参照を比較しtestProductproductがメモリに2つの異なるアドレスを指しているのでfalseを返します。あなたは比較を実行する方法を示すために、あなたのビューモデルに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

現在のインスタンスが参照型、等号(Object)メソッドであればdocs

を言うように は参照の等価性をテストし、Equals(Object)メソッドは の呼び出しはReferenceEqualsメソッドの呼び出しと同等です。参照 と等しいとは、比較されるオブジェクト変数が同一のオブジェクト を参照することを意味します。

あなたの場合、あなたの参照ではなくオブジェクトの内容を比較したいと思っています。これを実現する簡単な解決策は、両方のオブジェクトをjsonとしてシリアル化し、文字列を比較することです。

JsonConvert.SerializeObject(product) == JsonConvert.SerializeObject(testProduct) 
関連する問題