Serialización / deserialización de fecha y hora personalizada utilizando DataContractJsonSerializer

Cómo cambiar el JSON predeterminadoDateTime serialización / deserialización a un formato personalizado utilizandoDataContractJsonSerializer para todosDateTime propiedades en el gráfico de objeto?

La biblioteca Json.Net se ocupa de esto, pero no puedo usar eso en este proyecto.

Lo intentéIDataContractSurrogatepero no puedo acceder al valor -> conversión de cadena para DateTimes.

El modelo y el JSON esperado son:

[DataContract]
public class Client
{
    [DataMember(Name = "id")]
    public int Id {get; set; }
    [DataMember(Name = "name")]
    public string Name {get; set; }
    [DataMember(Name = "contacts")]
    public IList<Contact> Contacts {get; set; }
    [DataMember(Name = "created")]
    public DateTime Created {get; set; }
    [DataMember(Name = "changed")]
    public DateTime Changed {get; set; }
}

[DataContract]
public class Contact
{
    [DataMember(Name = "name")]
    public string Name {get; set; }
    [DataMember(Name = "created")]
    public DateTime Created {get; set; }
}
{
    "id": 123,
    "name": "Client Name",
    "contacts": [
        {
            "name": "Contact Name",
            "created": "2014-01-25 02:12:43"
        }
    ],
    "created": "2014-01-25 01:11:23"
    "changed": "2014-01-25 03:22:41"
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta