2012-06-08 13 views
6

2012-06-07T00:29:47.000 tarihine sahip bir json'um var ve serileştirilmesi gerekiyor. AmaDataContractJsonSerializer ayrıştırma izolatı 8601 date

DataContractJsonSerializer serializer = new DataContractJsonSerializer(type); 
return (object)serializer.ReadObject(Util.GetMemoryStreamFromString(json)); 

ben istisna altına almak

There was an error deserializing the object of type System.Collections.Generic.List`1 
[[MyNameSpace.MyClass, MyNameSpace, Version=1.0.4541.23433, Culture=neutral, PublicKeyToken=null]]. 
DateTime content '2012-06-07T00:29:47.000' does not start with '\/Date(' and end with ')\/' as required for JSON 

ki windows mobile 7 çalışıyor ama yerine \/Date(1337020200000+0530)\/ olarak tarih biçimini bekliyor 8.
aynı kod pencerelerinde çalışmıyor 2012-06-07T00:29:47.000.

Evet ise nasıl özel seri hale getirme gerektiriyor? Ve JSON.NET kullanamıyorum DataContractJsonSerializer kullanmak zorundayım ve JSON'un biçimi aynı JSON android için kullanıldığında değiştiremiyorum.
. Yeniyim. Net. Teşekkürler.

cevap

7

Bir dizgi özelliğini serileştirme/serileştirme için ve bir DateTime'a dönüştüren ayrı, dizilmemiş bir özellik kullanın. Kötü bir tarih alınırsa daha önce başarısız olmasına izin vermek, yerine FormattedReturnDate ait setter ayrıştırmayı yapabileceği

[DataContract] 
public class LibraryBook 
{ 
    [DataMember(Name = "ReturnDate")] 
    // This can be private because it's only ever accessed by the serialiser. 
    private string FormattedReturnDate { get; set; } 

    // This attribute prevents the ReturnDate property from being serialised. 
    [IgnoreDataMember] 
    // This property is used by your code. 
    public DateTime ReturnDate 
    { 
     // Replace "o" with whichever DateTime format specifier you need. 
     // "o" gives you a round-trippable format which is ISO-8601-compatible. 
     get { return DateTime.ParseExact(FormattedReturnDate, "o", CultureInfo.InvariantCulture); } 
     set { FormattedReturnDate = value.ToString("o"); } 
    } 
} 

: Daha kolay bazı örnek kodlar görmek için.


Düzenlendi tefrika Datamember doğru ismi vermek GôTô 'ın önerisini dahil etmek.

+0

2012-06-07T00: 29: 47.000 için bu tarih biçemi nedir? Bu yyyy'yi oluşturdum - 'MM' - 'dd'T'HH': 'mm': 'ss' ama don' '.000' ile ne yapılacağını bilmek –

+1

@InderKumarRathore' f' kullanabilirsiniz, örneğin 'Yyyy '-' AA '-' gg'T'SS ':' mm ':' ss fff'. '. Ama [o biçimindeki [standart biçim belirteci] (http://msdn.microsoft.com/en-us/library/az4se3k1.aspx) zaten [oldukça yakın] (http://msdn.microsoft.com) /en-us/library/az4se3k1.aspx#Roundtrip), eğer DateTime.Kind 'Utc' veya' Local' ise bir saat dilimini içerecektir. – shambulator

+0

öneriniz için teşekkürler çalışıyor. :) –