Предоставление объектов (DataContracts), которые не могут напрямую использоваться службой WCF? - PullRequest
1 голос
/ 07 апреля 2009

У меня есть несколько классов объектов, которые используют наследование. Кажется, что я могу получить доступ только к объектам, которые непосредственно используются службой. Позвольте мне показать вам, чего я пытаюсь достичь:

[DataContract]
public class Object1
{
   [DataMember]
   int Id {get; set;}
}

[DataContract]
public class object2: Object1
{
   [DataMember]
   string Name {get; set;}
}

[DataContract]
public class object3 
{
    [DataMember]
    int SomeNumber {get; set;}
}

Служба:

public int GetId(object2 obj)
{
    return GetTheId(object2.Name);
}

Теперь, когда я использую object2 в сервисе, object1 тоже сериализуется. Однако, я могу хотеть выставить объект 3 по какой-то причине. Это может быть производный класс, который я должен передать, чтобы его тип мог быть определен позже для другого процесса. Я не вижу, чтобы этот объект был сериализован. Я предполагал, что всякий раз, когда вы устанавливаете DataContract / DataMember, эти объекты будут сериализованы. Имеет смысл не показывать то, что не используется, потому что я вижу проблему с раскрытием предметов, которые вам могут не понадобиться. Каков наилучший способ выставить объекты, которые не используются сервисом напрямую? Спасибо

Daniel

Ответы [ 2 ]

1 голос
/ 07 апреля 2009

Вы должны украсить object2 (своеобразное имя для класса :)) с атрибутом KnownType :

[DataContract]
[KnownType(typeof(object3))]
public class object2 
{
}

Предполагая, что вы подразумеваете, что object3 является подклассом object2:

public class object3: object2
{
}
0 голосов
/ 07 апреля 2009

Полагаю, вы ответили на свой вопрос. Если участники не используются службой, то вы не должны показывать их. Всегда лучше предоставить минимальный набор данных, требуемый сервисом, так как это, как правило, повышает удобство обслуживания сервиса.

...