2017-01-16 2 views
0

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

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», а не для строки.

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

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

Рассказать об этом.

+0

Кажется, что сериализация не может автоматически использовать динамические типы. –

+0

Время выглядит так долго: DateTime time = DateTime.FromBinary (1482966000000); – jdweng

+0

Это только даты, которые проблематичны, другие типы (даже сложные объекты) работают хорошо. – david

ответ

0

Вы можете указать формат даты с помощью DataContractJsonSerializerSettings когда 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, который дает вам гораздо больше контроля над сериализации обработать.

+0

Здравствуйте, Darin, Я использую другой конструктор DataContractJsonSerializer: DataContractJsonSerializer ser = new DataContractJsonSerializer (typeof (T), null, int.MaxValue, false, dcs, AlwayEmitTypeInformation); ... Итак, параметр DataContractJsonSerializerSettings недоступен. Я ищу его установить до instanciation, как набор свойств, но я не могу найти свойство с именем «..Setting». – david

+0

Какую версию используемой среды .NET вы используете? Эти настройки доступны в .NET 4.5. Если вы используете более старую версию фреймворка, вам не повезло. Я бы порекомендовал вам перейти на Json.NET. –

+0

Я на FrameWork 4.0. Кроме того, я пытался использовать Json.Net, но я встречаю другую проблему, все объекты - тип JObject. Возможно, я не использую его правильно: 'Dim js As Newtonsoft.Json.Linq.JArray = Newtonsoft.Json.Linq.JArray .Parse (json) Dim ret As T = js.ToObject (Of T)() Return ret' – david

Смежные вопросы