2010-08-24 22 views
11

आर @ "। NETFramework \ v4.0 \ प्रोफाइल \ क्लाइंट \ System.Runtime.Serialization.dll"

open System.Runtime.Serialization 
open System.Runtime.Serialization.Json 

[<DataContract>] 
    type geo = { 
     [<field: DataMember(Name = "type")>] 
     t:string 
     [<field: DataMember(Name = "coordinates")>] 
     coordinates:string 
     } 


let decode (s:string) = 
    let json = new DataContractJsonSerializer(typeof<geo>) 
    let byteArray = Encoding.UTF8.GetBytes(s) 
    let stream = new MemoryStream(byteArray) 
    json.ReadObject(stream) :?> geo 

let tw = {"type":"Point","coordinates":[-7.002648,110.449961]} 

decode tw 

यह रिटर्न -> अंतिम तत्व, नाम स्थान से 'निर्देशांक' '' उम्मीद । नामस्थान से 'तत्व' आइटम 'JSON को पार्स एफ #

मैं डेटामेम्बर निर्देशांक को कैसे परिभाषित कर सकता हूं ताकि यह समझ सके?

धन्यवाद एक बहुत

उत्तर

8

संदर्भ System.Runtime.Serialization और System.Xml

काम करता है (इंटरएक्टिव: #R "System.Runtime.Serialization")

open System.IO 
open System.Runtime.Serialization.Json 
open System.Xml 
open System.Text 

/// Object to Json 
let internal json<'t> (myObj:'t) = 
     use ms = new MemoryStream() 
     (new DataContractJsonSerializer(typeof<'t>)).WriteObject(ms, myObj) 
     Encoding.Default.GetString(ms.ToArray()) 


/// Object from Json 
let internal unjson<'t> (jsonString:string) : 't = 
     use ms = new MemoryStream(ASCIIEncoding.Default.GetBytes(jsonString)) 
     let obj = (new DataContractJsonSerializer(typeof<'t>)).ReadObject(ms) 
     obj :?> 't 
+0

हाँ ठंडा, इसके लिए धन्यवाद – jlezard

6

इस के लिए मुझे

#r "System.Runtime.Serialization" 

open System.IO 
open System.Text 
open System.Runtime.Serialization 
open System.Runtime.Serialization.Json 

[<DataContract>] 
    type geo = { 
     [<field: DataMember(Name = "type")>] 
     t:string 
     [<field: DataMember(Name = "coordinates")>] 
     coordinates:float[] 
     } 


let decode (s:string) = 
    let json = new DataContractJsonSerializer(typeof<geo>) 
    let byteArray = Encoding.UTF8.GetBytes(s) 
    let stream = new MemoryStream(byteArray) 
    json.ReadObject(stream) :?> geo 

let tw = "{ 
    \"type\":\"Point\", 
    \"coordinates\":[-7.002648,110.449961] 
    }" 

let v = decode tw // val v : geo = {t = "Point"; coordinates = [|-7.002648; 110.449961|];} 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन डिकोड करने के लिए स्ट्रिंग में कोई \ "नहीं है, इसलिए मुझे इसे काम करने के लिए एक रास्ता खोजने की ज़रूरत है उनके बारे में (अन्य जो tw.Replace ("[", @ "\" [")। बदलें ("] ", @"] \ ""), धन्यवाद! – jlezard

+0

[-7.002648,110.449961] स्ट्रिंग वैल्यू नहीं है लेकिन फ्लोट्स की सरणी है, यदि आप भू-परिभाषा को ठीक करते हैं तो क्षेत्र को निर्देशित किया जाता है [] - इसे इस समस्या को ठीक करना चाहिए। मैंने इस नमूना को – desco

+0

प्रदर्शित करने के लिए सही किया है धन्यवाद जो सही काम करता है! – jlezard

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