2012-09-28 7 views
10

साथ मैं Global.asax.cs में निम्न सेटिंग के साथ एक वेब एपीआई परियोजना है:पार्सिंग आईएसओ अवधि JSON.Net

var serializerSettings = new JsonSerializerSettings 
    { 
     DateFormatHandling = DateFormatHandling.IsoDateFormat, 
     DateTimeZoneHandling = DateTimeZoneHandling.Utc 
    }; 

serializerSettings.Converters.Add(new IsoDateTimeConverter()); 

var jsonFormatter = new JsonMediaTypeFormatter { SerializerSettings = serializerSettings }; 
jsonFormatter.MediaTypeMappings.Add(GlobalConfiguration.Configuration.Formatters[0].MediaTypeMappings[0]); 

GlobalConfiguration.Configuration.Formatters[0] = jsonFormatter; 

WebApiConfig.Register(GlobalConfiguration.Configuration); 

इस सब के बावजूद, Json.Net ISO durations पार्स नहीं कर सकता।

Error converting value "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z" to type 'System.TimeSpan'.

मैं Json.Net v4.5 उपयोग कर रहा हूँ:

यह इस त्रुटि फेंकता है।

मैंने "पी 1 एम" और अन्य लोगों को विकी पेज पर सूचीबद्ध कुछ मूल्यों की कोशिश नहीं की है।

तो सवाल यह है:

  1. Am मैं कुछ याद आ रही?
  2. या क्या मुझे कुछ कस्टम फॉर्मेटर लिखना है?

उत्तर

18

मैं एक ही समस्या में भाग गया और अब मैं .NET टाइमस्पैन को आईएसओ 8601 अवधि स्ट्रिंग में कनवर्ट करने के लिए इस कस्टम कनवर्टर का उपयोग कर रहा हूं।

public class TimeSpanConverter : JsonConverter 
{ 
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     var ts = (TimeSpan) value; 
     var tsString = XmlConvert.ToString(ts); 
     serializer.Serialize(writer, tsString); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 
     JsonSerializer serializer) 
    { 
     if (reader.TokenType == JsonToken.Null) 
     { 
      return null; 
     } 

     var value = serializer.Deserialize<String>(reader); 
     return XmlConvert.ToTimeSpan(value); 
    } 

    public override bool CanConvert(Type objectType) 
    { 
     return objectType == typeof (TimeSpan) || objectType == typeof (TimeSpan?); 
    } 
} 
+0

यह सबसे अच्छा समाधान –

+0

इसके लिए धन्यवाद है! जेसन पार्सर में XmlConvert रखने के लिए थोड़ा अजीब लगता है लेकिन यह अच्छी तरह से काम करता है। – Oliver

+0

हाँ, वास्तव में अजीब चीज एक्सएमएल फ़ंक्शन का उपयोग करके एक बहुत ही समान दृष्टिकोण है जिसे जावा में भी इसे पूरा करने के लिए आपको उपयोग करने की आवश्यकता है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^