2012-06-08 9 views
6

मैं एक json जो 2012-06-07T00:29:47.000 के रूप में की तारीख है और deserialized हो गया है है। लेकिनDataContractJsonSerializer पार्स आईएसओ 8601 की तारीख

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

पर मैं अपवाद नीचे मिल

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 

यह विंडोज़ मोबाइल 7 में काम कर रहा है, लेकिन एक ही कोड खिड़कियों में काम नहीं कर रहा 8.
यह बजाय \/Date(1337020200000+0530)\/ के रूप में दिनांक स्वरूप की उम्मीद है 2012-06-07T00:29:47.000 का।

यह कस्टम क्रमांकन हाँ तो कैसे आवश्यकता होती है? और मैं JSON.NET उपयोग नहीं कर सकते मैं DataContractJsonSerializer का उपयोग करने के लिए बाध्य कर रहा हूँ और मैं JSON के प्रारूप के रूप में ही JSON एंड्रॉयड के लिए प्रयोग किया जाता है नहीं बदल सकते।
मैं .NET में नया हूं। धन्यवाद।

उत्तर

7

उपयोग एक क्रमबद्धता/deserialisation के लिए स्ट्रिंग संपत्ति, और एक अलग, गैर धारावाहिक संपत्ति है कि यह एक दिनांक समय में धर्मान्तरित। आसान कुछ नमूना कोड को देखने के लिए:

[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"); } 
    } 
} 

इसके बजाय आप FormattedReturnDate की सेटर में पार्स कर सकता है, यह पहले विफल करता है, तो एक बुरा तारीख प्राप्त होता है अनुमति देने के लिए।


संपादित धारावाहिक DataMember सही नाम देने के लिए GôTô के सुझाव शामिल करने के लिए।

+0

'2012-06-07T00 के लिए तारीख फ़ॉर्मेटर क्या है: 29: 47.000' मैं इस' yyyy बनाया है '-' एम एम '-' dd'T'HH ':' मिमी ':' ss' लेकिन डॉन ' टी '000' –

+1

@InderKumarRathore के साथ क्या करना है, आप 'f' का उपयोग कर सकते हैं, उदाहरण के लिए 'Yyyy '-' एम एम '-' dd'T'HH ':' मिमी ':' एस एस fff' '।'। लेकिन [मानक प्रारूप विनिर्देशक] (http://msdn.microsoft.com/en-us/library/az4se3k1.aspx) 'o' का है [पहले से ही बहुत करीब है] (http://msdn.microsoft.com /en-us/library/az4se3k1.aspx#Roundtrip), हालांकि इसमें आपका टाइमटाइम होगा। अगर आपका डेटटाइम। किंड 'यूटीसी' या 'लोकल' है। – shambulator

+0

आपके सुझाव के लिए धन्यवाद यह काम कर रहा है। :) –