简体   繁体   English

Json解析F#

[英]Json parsing F#

r@".NETFramework\\v4.0\\Profile\\Client\\System.Runtime.Serialization.dll" R 7 “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 

This returns -> End element 'coordinates' from namespace '' expected. 这将从命名空间''expect返回 - > End元素'坐标'。 Found element 'item' from namespace '' 从命名空间''找到元素'item'

How can I define the DataMember coordinates so that it understands ? 如何定义DataMember坐标以便它理解?

Thanks a lot 非常感谢

Reference System.Runtime.Serialization and System.Xml 参考System.Runtime.Serialization和System.Xml

(Interactive: #r "System.Runtime.Serialization" ) (互动:#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

this works for me 这对我有用

#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|];}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM