Возвращение подкласса DataContract - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть DataContract, который я использую в качестве типа возврата из службы WCF.

[DataContract]
public NameResult
{
    [DataMember]
    public string Name { get; set; }
}

Однако я хочу сохранить дополнительную информацию на стороне службы, поэтому я создаю подкласс:

internal ServiceNameResult : NameResult
{
    internal Guid ID { get; set; }
}

Однако кажется, что я не могу использовать экземпляры этого какзначение результата (ошибка, которую я получаю на клиенте, не очень полезна - нераспознанная ошибка 109 (0x6d).

В основном, если я делаю;

NameResult GetName() 
{
    NameResult result = {...}
    return result;
}

Тогда это работает, ноесли я это сделаю;

NameResult GetName()
{
    ServiceNameResult result = {...}
    return result;
}

Это не так. Я действительно не хочу копировать свойства из ServiceNameResult в новый NameResult. Надеюсь, есть способ заставить эту работу работать?

Я уже поместил [IgnoreDataMember] в подкласс, но это не имеет значения.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2011

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

internal class ServiceNameResult
{
    object OtherInformation { get; set; }

    NameResult Result { get; set; }
}

Таким образом, ваша внутренняя реализация службы может содержать ссылку на объект возврата клиента, а также дополнительную информацию, но вы не загрязняете ваш интерфейс.

0 голосов
/ 03 ноября 2011

Вам необходимо определить ServiceNameResult как известный тип

...