Tengo un servicio WCF alojado para clientes internos; tenemos el control de todos los clientes. Por lo tanto, utilizaremos una biblioteca de contratos de datos para negar la necesidad de generación de proxy. Me gustaría usar algunas propiedades de solo lectura y tener algunos datos sin constructores por defecto. Gracias por su ayuda ...WCF DataContracts
12
A
Respuesta
24
Las propiedades de solo lectura están bien siempre que marque el campo (no de solo lectura) como [DataMember], no la propiedad. A diferencia de XmlSerializer, IIRC DataContractSerializer no utiliza el ctor predeterminado: utiliza un mecanismo de reflexión separado para crear instancias no inicializadas. Excepto en el "Olive" de mono (puerto WCF), donde hace use el ctor predeterminado (en este momento, o en algún momento del pasado reciente).
Ejemplo:
using System;
using System.IO;
using System.Runtime.Serialization;
[DataContract]
class Foo
{
[DataMember(Name="Bar")]
private string bar;
public string Bar { get { return bar; } }
public Foo(string bar) { this.bar = bar; }
}
static class Program
{
static void Main()
{
DataContractSerializer dcs = new DataContractSerializer(typeof(Foo));
MemoryStream ms = new MemoryStream();
Foo orig = new Foo("abc");
dcs.WriteObject(ms, orig);
ms.Position = 0;
Foo clone = (Foo)dcs.ReadObject(ms);
Console.WriteLine(clone.Bar);
}
}
Cuestiones relacionadas
- 1. INotifyPropertyChanged en WCF DataContracts
- 2. Nombrando DataContracts genéricos en WCF
- 3. DataContracts and DataMembers
- 4. RESTO con DataContracts polimórficos - La deserialización falla
- 5. ¿Deberían los DataContracts de WCF ser tipos de valor o referencia?
- 6. Cuándo/Por qué no debería usar IsReference = true en mis DataContracts?
- 7. WCF/WCF Data Services/Servicios WCF RIA
- 8. WCF Contracts from Entity Framework?
- 9. ¿La mejor práctica para el servicio WCF grande?
- 10. Generando DataContracts con el espacio de nombre exacto como en XSD
- 11. WCF 4.0 nuevas mejoras sobre WCF 3.5
- 12. WCF: Cómo deshabilitar WCF Test Client
- 13. Uso de WCF DataContract en MVC SessionState usando el caché de AppFabric
- 14. WCF Contratos de datos y uso compartido de entradas
- 15. WCF CollectionDataContract
- 16. WCF AddressAccessDeniedException
- 17. UriTemplate WCF
- 18. WCF OperationContract
- 19. Autenticación WCF
- 20. Diferencia entre WCF Service, WCF RIA Services y WCF Data Service
- 21. cómo marcar una interfaz como DataContract en WCF
- 22. ¿Qué mejores prácticas de WCF sigues en el diseño de modelos de objetos?
- 23. Monotouch/WCF: cómo consumir el servicio wcf sin svcutil
- 24. Uso de Ninject WCF Extension con WCF Web Service
- 25. WCF 4.0: WebMessageFormat.Json no funciona con la plantilla WCF REST
- 26. Pasar credenciales de un servicio wcf a otro servicio wcf
- 27. diferencia entre el API Web WCF y WCF Data Services
- 28. Autenticación WCF SIN SSL
- 29. WCF REST Compresión
- 30. WCF IList serialización Edición
Ok, que tiene sentido. No pude encontrar ninguna documentación sobre eso y pensé que había leído que se necesitaba un constructor predeterminado. Esto funciona genial! Gracias ... –
esto está bien si tiene una propiedad de respaldo simple, pero ¿y si la propiedad de solo lectura es algo así como cadena pública FooBar {get {return Foo + '' + Bar; }} ¿cómo maneja el serializador de contrato de datos esa situación? – lomaxx
@lomaxx, bueno, a menos que lo marque '[DataMember]', no hará nada; pero esa es una propiedad de solo lectura, así que espero que lo ignore o arroje una excepción. Si tiene un getter y setter, hará lo que su código le pida que haga. –