Los datos se pierden cuando se agrega la etiqueta de versión xml a xml al publicar en wcf

Ok, estoy realmente perdido en esto. Creé un servicio wcf en el que publico xml y los servicios hacen algo con los datos. Todo funciona muy bien, excepto cuando coloco la etiqueta xml de apertura en la parte superior de mi xml. los datos aparecen como nulos cuando veo todo en modo de depuración.

Mi código C# en el wcf es algo como esto:

public interface ITest
{
    [OperationContract]
    void DoWork();

    [OperationContract]
    [WebDispatchFormatter]
    [WebInvoke(UriTemplate = "MyTest", Method = "*")]
    void MyTest(PassedIn request);
}

[Serializable]
[DataContract(Namespace = "", Name = "")]
public class PassedIn
{
    public PassedIn() { }

    [DataMember]
    public string firstname {get; set;}
    [DataMember]
    public string lastname {get; set;}
    [DataMember]
    public string email {get; set;}
}

Aquí están las diferentes publicaciones xml:

<mypost>
    <firstname>test</firstname>
    <lastname>foo</lastname>
    <email>test@bar.com</email>
</mypost>
<?xml version="1.0"?>
<mypost>
    <firstname>test</firstname>
    <lastname>foo</lastname>
    <email>test@bar.com</email>
</mypost>

Pude arreglar esto donde los datos no se pierden cuando la etiqueta está en el xml agregando el pedido al miembro de datos de esta manera:

public class PassedIn
{
    public PassedIn() { }

    [DataMember (order=1)]
    public string firstname {get; set;}
    [DataMember  (order=2)]
    public string lastname {get; set;}
    [DataMember  (order=3)]
    public string email {get; set;}
}  

PERO ahora tiene un efecto inverso. Si no tengo la etiqueta "? Versión xml", los datos aparecen como nulos.

¿Alguien se ha encontrado con esto? Realmente podría usar algunos consejos. Gracias

preguntado el 27 de julio de 12 a las 20:07

No sé si esto importaría, pero ¿has probado a decorar PassedIn con el [DataContract] ¿atributo? -

ya dejé esa parte fuera... ya está ahí. Acabo de editar mi código allí. -

Si tienes el control de ambos extremos, echa un vistazo a Pila de servicios. -

1 Respuestas

Lo descubrí... al usar DataContractSerializer, el orden es importante, pero si no especifica el orden, el orden predeterminado es alfabético, por lo que algunos datos se establecieron y otros no.

Realmente no quería que el orden importara, así que tuve que cambiar de DataContractSerializer a otro motor de serlización. Serializador Xml.

Enlaces a información que me ayudó: WCF Deshabilitar sensibilidad de orden de deserialización http://msdn.microsoft.com/en-us/library/ms732038.aspx

contestado el 23 de mayo de 17 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.