2017-08-24 29 views
1

Ich ein ProductBO-Objekt auf einen HttpPost-Dienst buchen, aber wenn Sie es vergleichen, false zurückgeben.Vergleichen von zwei Objekten in WebApi HttpPost-Anforderung funktioniert nicht

ich hinzufügen, Debugger und bewertet (Schnellüberwachung) Wert während der Laufzeit des alle andere Mitglieder beiden Klassen sind gleich, aber wenn ich product.Equals(testProduct) vergleichen Retuns es falsch. Ich Übergabe von Daten wie ..

Ich Übergabe von Daten unter Verwendung von Postman in rohen

{ 
    "Id" :1, 
    "Name" : "Tomato Soup", 
    "Category" :"Groceries", 
    "Price" : 1 
} 

und Texttyp ist application/json. Was mache ich falsch.und ob es ein besserer Ansatz ist, ein Objekt so oder nicht zu übergeben.

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

Antwort

5

Für Referenztypen vergleichen die Equals Verfahren Objektreferenzen und es kehrt false weil testProductproduct und 2 verschiedene Adressen im Speicher ausgerichtet sind. Sie könnten den IEquatable<T>-Schnittstelle auf Ihrem View-Modell implementieren, um anzuzeigen, wie der Vergleich auszuführen:

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

Als docs sagt

Wenn die aktuelle Instanz ein Referenztyp ist, das Verfahren der Equals (Object) testet auf Referenzgleichheit, und ein Aufruf der Equals (Object) -Methode entspricht einem Aufruf der ReferenceEquals-Methode. Referenz Gleichheit bedeutet, dass sich die verglichenen Objektvariablen auf desselben Objekts beziehen.

In Ihrem Fall möchten Sie den Inhalt der Objekte und nicht ihre Referenz vergleichen. Die einfache Lösung, um dies zu erreichen, besteht darin, beide Objekte als json zu serialisieren und die Strings

JsonConvert.SerializeObject(product) == JsonConvert.SerializeObject(testProduct) 
zu vergleichen
Verwandte Themen