2016-11-10 1 views
1

Actuellement, je crée un DTO d'un objet pour comparer les valeurs nouvelles et anciennes. C'était bien quand c'était un objet, mais dans le futur cela va changer. J'ai essayé de créer un extension method à serialize et deserialize pour une copie profonde, mais PostSharp renvoie une erreur.C# comparer des objets sans créer dto

type 'PostSharp.Patterns.Model.NotifyPropertyChanged.ChangeTracking.ChildPropertyChangedProcessor' à l'Assemblée 'PostSharp.Patterns.Model, Version = 4.2.28.0, Culture = neutral, PublicKeyToken = e7f631e6ce13f078' est pas marqué comme sérialisable. (SerializationException)

Voici ma méthode d'extension et l'erreur est levée à formatter.Serialize(stream, source). Y at-il un moyen de corriger cette erreur ou dois-je le faire d'une autre manière? Si je dois trouver une autre voie quelle approche devrais-je prendre?

+0

Avez-vous essayé la mise à niveau à PostSharp 4.3? A quoi ressemble votre classe améliorée par l'aspect NotifyPropertyChanged? –

Répondre

2

Vous pouvez utiliser AutoMapper pour cela aussi: (Chaque application devrait l'utiliser de toute façon, alors quel est le mal?)

var clone = new Poco(); 
Mapper.CreateMap<Poco, Poco>(); 
Mapper.Map<Poco, Poco>(source, clone); 
1

Il existe de nombreuses références aux bibliothèques de comparaison de graphes d'objets profonds basés sur la réflexion; https://github.com/GregFinzer/Compare-Net-Objects à titre d'exemple devrait faire ce que vous voulez sans sérialisation

+0

Serait-ce réellement créer une copie profonde aussi bien? –

+0

Non - mais la méthode qu'ils utilisent pour parcourir l'arborescence d'objets peut être facilement adaptée pour créer une copie. – PhillipH

+0

Merci pour cela, je pense qu'il pourrait être utile à l'avenir, mais AutoMapper pourrait être une meilleure solution pour l'instant. –