Frage

Hat jemand bekommt dies tatsächlich zu arbeiten? Die Dokumentation ist nicht vorhanden, wie diese Funktion zu aktivieren, und ich bekomme fehlende Attribut Ausnahmen trotz eines 3.5 SP1 Projekt mit.

War es hilfreich?

Lösung

fand ich, dass es nicht mit internen / privaten Typen funktioniert, aber mache meinen Typen Öffentlichkeit es funktionierte gut. Dies bedeutet keine anonymen Typen entweder: (

Mit Reflektor ich die Methode ClassDataContract.IsNonAttributedTypeValidForSerialization (Typ) gefunden, die die Entscheidung zu treffen scheint. Es ist die letzte Zeile, die den Killer zu sein scheint, muss der Typ sichtbar sein, so dass keine internen / private Typen erlaubt: (

internal static bool IsNonAttributedTypeValidForSerialization(Type type)
{
    if (type.IsArray)
    {
         return false;
    }
    if (type.IsEnum)
    {
        return false;
    }
    if (type.IsGenericParameter)
    {
        return false;
    }
    if (Globals.TypeOfIXmlSerializable.IsAssignableFrom(type))
    {
        return false;
    }
    if (type.IsPointer)
    {
        return false;
    }
    if (type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false))
    {
        return false;
    }
    foreach (Type type2 in type.GetInterfaces())
    {
        if (CollectionDataContract.IsCollectionInterface(type2))
        {
            return false;
        }
    }
    if (type.IsSerializable)
    {
        return false;
    }
    if (Globals.TypeOfISerializable.IsAssignableFrom(type))
    {
        return false;
    }
    if (type.IsDefined(Globals.TypeOfDataContractAttribute, false))
    {
        return false;
    }
    if (type == Globals.TypeOfExtensionDataObject)
    {
        return false;
    }
    if (type.IsValueType)
    {
        return type.IsVisible;
    }
    return (type.IsVisible && (type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, Globals.EmptyTypeArray, null) != null));

}

Andere Tipps

Ich habe dies auf einem Test-App zu gut funktionieren ...

Service Definition:

[ServiceContract]
public interface IService1
{

    [OperationContract]
    CompositeType GetData(int value);

}


public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";

    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    public string StringValue
    {
        get { return stringValue; }
        set { stringValue = value; }
    }
}

Service Implementation:

public class Service1 : IService1
{
    public CompositeType GetData(int value)
    {
        return new CompositeType()
        {
            BoolValue = true,
            StringValue = value.ToString()
        };
    }

}

Es gibt mehrere Serialisierungsoptionen in WCF: Datenvertrag, XML-Serialisierung und und Rohdaten Nutzlast. Welche dieser versuchen, die Sie zu verwenden? Von der Frage, wie es scheint Sie versuchen, mit Datacontact Attributen geschmückt etwas anderes als Objekte zu verwenden. Ist das, was Sie fragen?

Ja, ich bin versucht, das Attribut frei Serialisierung zu verwenden, die als Teil von SP1 ( http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx ). Verdammt, wenn ich kann es an der Arbeit und es gibt keine Dokumentation für es.

Möglicherweise meine Verwendung von abstrakten Basisklassen ist verwirrend, die Sache, obwohl ich alles in der bekannten Arten Liste bin hinzufügen.

Ja, es könnte hat mit abstrakten Klassen und Vererbung zu tun. Es kann manchmal Verwirrung mit Serialisierung. Auch könnte es die Sichtbarkeit der Klassen und Klassenhierarchie als auch sein, wenn alles nicht öffentlich ist.

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