Frage

Ich weiß, dass eine private parameterlosen Konstruktor funktioniert, aber was ist ein Objekt ohne parameterlos Bauer?

Ich möchte Arten von einem Dritten Bibliothek belichten, damit ich keine Kontrolle über die Typdefinitionen haben.

Wenn es eine Art und Weise, was ist der einfachste? Z.B. Ich weiß nicht, was zu haben, um einen Untertyp zu erstellen.

Edit:

Was ich suche ist so etwas wie die Höhe der Anpassung hier gezeigt: http://msdn.microsoft.com/en-us/magazine/cc163902.aspx obwohl ich möchte zu Ströme greifen nicht haben zu serialisiert / deserialisieren.

War es hilfreich?

Lösung

Sie können nicht wirklich beliebige Typen serialisierbar machen; in einigen Fällen (XmlSerializer, zum Beispiel) die Laufzeit aussetzt Optionen, um die Attribute zu fälschen. Aber DataContractSerializer dies nicht zulässt. Machbar Optionen:

  • verstecken die Klassen hinter Ihren eigenen Typen, die sind serializable (viel Arbeit)
  • liefert binäres Formatierungsprogramm Surrogate (yeuch)
  • schreiben Sie Ihre eigene Serialisierung Kern (eine Menge Arbeit richtig zu machen)

Im Wesentlichen, wenn etwas nicht entwickelt für die Serialisierung, sehr wenig von dem Rahmen wird lassen Sie serialisiert es.

Andere Tipps

Ich bin kein WCF-Experte, aber es ist unwahrscheinlich, dass sie die Serialisierung auf einem Konstruktor mit beliebigen Typen unterstützen. Und zwar weil das, was würden sie für Werte passieren in? Sie könnten für structs null für Referenztypen und leere Werte übergeben. Aber was wäre eine Art, dass mit völlig leeren Daten konstruiert werden könnte?

Ich glaube, Sie mit 1 von 2 Optionen stecken

  1. Unterklasse der in Rede stehenden Art und entsprechenden Standardwerte an den nicht-parameterlos Konstruktor übergeben
  2. Erstellen Sie einen Typ, der soley für die Serialisierung vorhanden ist. Nach der Fertigstellung kann eine Instanz des ursprünglichen Typs erstellen, die Sie interessieren. Es ist eine Brücke von Arten.

Persönlich würde ich für # 2 gehen. Machen Sie die Klasse eine Daten nur Struktur und optimieren es für die Serialisierung und Fabrik Zwecke.

Ich lief nur einen kleinen Test, einen WCF-Dienst verwenden, die ein Basisobjekt zurückgibt, die nicht über einen Standardkonstruktor hat.

//[DataContract]
//[Serializable]
public class MyObject
{
    public MyObject(string _name)
    {
        Name = _name;
    }

    //[DataMember]
    public string Name { get; set; }

    //[DataMember]
    public string Address { get; set; }
}

Hier ist, was der Dienst wie folgt aussieht:

public class MyService : IMyService
{
    #region IMyService Members

    public MyObject GetByName(string _name)
    {
        return new MyObject(_name) { Address = "Test Address" };
    }

    #endregion
}

Das tatsächlich funktioniert, solange MyObject ist entweder ein [Datacontract] oder [Serializable]. Interessanterweise scheint es nicht den Standard-Konstruktor auf der Clientseite zu müssen. Es gibt einen Zusammenhang Beitrag hier:

Wie WCF Deserialisierung Objekte instanziiert, ohne dass ein Aufruf Konstruktor?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top