2012-03-26 8 views
0

Dies wurde zuvor gefragt, aber nicht zu diesem spezifischen Problem. Fast alle Antworten, die ich gelesen habe, befassen sich mit dem Entitätsrahmen, der serialisiert wird. Ich versuche ein Objekt nach dem ActiveRecord-Muster zu serialisieren, das einige Informationen aus einer MultiValue-Datenbank (UniVerse) enthält. Obwohl ich dachte, dass die Struktur meiner Datenhalteklassen sehr einfach ist, besteht JsonSerializer darauf, kreisförmige Referenzen zu finden Ich finde heraus, wo der Zirkelbezug gefunden wird.MVC3 JsonSerializer findet geheimnisvolle Zirkelverweise?

Mein Objekt hat diese Art von Struktur, um es:

/// <summary> 
/// Textbook Active Record 
/// </summary> 
public class TextbookActiveRecord 
{ 
    public DBValue<string> ISBN { get; private set; } 
    public DBValue<string> Synonym { get; private set; } 
    public DBValue<DateTime> LastUpdate { get; private set; } 
    public DBValue<string> Author { get; private set; } 
    public DBValue<string> Title { get; private set; } 
    //....up to 70 more properties for some of my tables.... 

    protected TextbookActiveRecord() { } 

    public static TextbookActiveRecord GetByISBN(string isbn) 
    { 
     //....Creates a new object and fills in the values above... 
    } 
} 

Die DBValue Klasse ist nur ein Wrapper-Klasse, die mich jeden Wert lässt behandeln, als ob es sich um eine generische waren, wenn ich zu müssen DBValue von einziehe (nein <T>), wobei alle Typen gleichzeitig nullfähig sein können. Wenn ich versuche, eine Instanz dieses Objekts, das von TextbookActiveRecord.GetByISBN() erstellt wurde, zu serialisieren, erhalte ich den zirkulären Referenzfehler. Keines meiner DBValue-Objekte verwendet andere Klassen als string, float, int oder DateTime als Vorlage.

Ich habe versucht, die ISerializable-Schnittstelle zu implementieren und die GetObjectData-Methode zu verwenden, um ein SerializationInfo-Objekt zu füllen, aber durch die Verwendung von Ausnahmen habe ich gesehen, dass diese Methode nicht einmal aufgerufen wird (einen Wurf direkt an der Anfang der Methode tut gar nichts).

Weiß jemand, was in der Welt damit falsch ist? Könnten es die statischen Methoden oder vielleicht der geschützte Konstruktor sein?

Sogar zu wissen, wie ich die bestimmte Eigenschaft finden kann, die ihr den Zirkelbezug gibt, wäre wirklich sehr hilfreich.

Antwort

0

Serialisierung einer Klasse mit Methoden hat mir Kopfschmerzen gegeben. Linq in den Methoden war mein Problem.

Ich habe dies durch Entfernen der Methoden und Hinzufügen von ihnen als Erweiterung Methoden, so dass die eigentliche Klasse serialisiert besteht nur aus Eigenschaften.

Verwandte Themen