jueves, 27 de enero de 2011

Data Contract Known Types

Hoy me he encontrado con un problemilla (bueno más que un problemilla era que desconocía la manera correcta de hacerlo) a la hora de desarrollar un sevicio WCF.

El problema era que quería construir un método que recibía por parametro un objeto de tipo x, pero quería ofrecer al cliente la opción de poder pasar como parámetro objetos derivados de tipo x que había construido. Yo habia declarado todas estas clases con el atributo [DataContract], pero parece ser que esto no era suficiente, sino que había que especificar en la clase base, que también podiamos pasar objetos derivados usando el atributo [KnownType(typeof(claseBase)]

Aquí va la solución:

using System;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace FooNamespace
{
[ServiceContract]
public interface IFoo
{
[OperationContract]
void DoSomething(FooDataBase dataEntrada);
}

[DataContract]
[KnownType(typeof(FooDataDerived))]
public class FooDataBase
{
[DataMember]
public string FooProperty1 { get; set; }
}

[DataContract]
public class FooDataDerived:FooDataBase
{
[DataMember]
public string FooProperty2 { get; set; }
}
}

No hay comentarios: