Принудительная десериализация DateTime в свойстве type object

У меня есть объект со свойством типа «object» (нужно это для общего кода).

Public Property Valeur() As Object

Я сериализую его с DataContractJsonSerializer, и у меня есть это:

            }, {
            "Desc": "Date ouverture",
            "Id": "DatOuverture",
            "Mode": 0,
            "Valeur": "/Date(1482966000000+0100)/"
        }, {

Поэтому, когда я десериализую его, сериализатор приводит «Valeur» в строке, а не в dateTime.

Valeur = "/Date(1482966000000+0100)/"

Я пробовал с «AlwaysTransmitTypeInformation», но это ничего не меняет.
Когда я пишу в свойстве перед сериализацией, она хорошо в типе «DateTime», а не string.

Для получения информации Valeur может быть другим типом dateTime.

У кого-нибудь есть идея ?

Рассматривать.

1 ответ

  1. Вы можете указать формат дат, используя DataContractJsonSerializerSettingswhen constructing your serializer object:

    public class Item
    {
        public object Value { get; set; }
    }
    
    
    class Program
    {
        static void Main()
        {
            var settings = new DataContractJsonSerializerSettings
            {
                DateTimeFormat = new DateTimeFormat("o"),
            };
            var serializer = new DataContractJsonSerializer(typeof(Item), settings);
    
            var item = new Item { Value = DateTime.UtcNow };
            serializer.WriteObject(Console.OpenStandardOutput(), item);
        }
    }
    

    сериализует как:

    {"Value":"2017-01-16T08:50:47.9127678Z"}
    

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