I'm deserializing JSON into class objects and I would like to avoid duplicate ones. I've tried to implement IEqualityComparer, but it does not seem to work, because Equals() or GetHashCode() methods are never fired and resulting HashSet contains duplicates too. What's I'm doing wrong?
[DataContract]
public class Release : IEqualityComparer<Media>
{
public bool Equals(Media m1, Media m2)
{
if (m1.mediaFormat == m2.mediaFormat && m1.getTrackPosition() == m2.getTrackPosition()) { Console.WriteLine("Duplicate!"); return true; }
else return false;
}
public int GetHashCode(Media m) { Console.WriteLine("DDD!"); return m.ToString().GetHashCode(); }
[DataMember(Name = "title")]
public string releaseTitle { get; set; }
[DataMember(Name = "date")]
public string releaseDate { get; set; }
[DataMember(Name = "id")]
public string releaseMBID; //required for fetching artwork
[DataMember(Name = "media")]
public HashSet<Media> releaseMedia { get; set; }
public List<Media> getReleaseMedia() { return releaseMedia.ToList<Media>(); }
}
[DataContract]
public class Media
{
[DataMember(Name = "format")]
public string mediaFormat { get; set; }
[DataMember(Name = "track-offset")]
public string mediaTrackOffset { get; set; }
[DataMember(Name = "track-count")]
public string mediaTrackCount { get; set; }
public string getTrackPosition() { return (Convert.ToInt32(mediaTrackOffset) + 1).ToString() + "/" + mediaTrackCount; }
}