Json解析F# r@“.NETFramework\v4.0\Profile\Client\System.Runtime.Serialization.dll” open System.Runtime.Serialization open System.Runtime.Serialization.Json [] 类型geo={ [] t:字符串 [] 坐标:字符串 } 让我们解码(s:字符串)= 让json=newDataContractJSonSerializer(typeof) let byteArray=Encoding.UTF8.GetBytes(s) let stream=新内存流(byteArray) json.ReadObject(流):?>geo 设tw={“类型”:“点”,“坐标”:[-7.002648110.449961]} 解码tw

Json解析F# r@“.NETFramework\v4.0\Profile\Client\System.Runtime.Serialization.dll” open System.Runtime.Serialization open System.Runtime.Serialization.Json [] 类型geo={ [] t:字符串 [] 坐标:字符串 } 让我们解码(s:字符串)= 让json=newDataContractJSonSerializer(typeof) let byteArray=Encoding.UTF8.GetBytes(s) let stream=新内存流(byteArray) json.ReadObject(流):?>geo 设tw={“类型”:“点”,“坐标”:[-7.002648110.449961]} 解码tw,json,f#,datacontract,Json,F#,Datacontract,这将返回-> 应为命名空间“”中的结束元素“坐标”。从命名空间“”中找到元素“项” 如何定义DataMember坐标,使其能够理解 非常感谢这对我有用 #r "System.Runtime.Serialization" open System.IO open System.Text open System.Runtime.Serialization open System.Runtime.Serialization.Json [<DataContract>] type g

这将返回-> 应为命名空间“”中的结束元素“坐标”。从命名空间“”中找到元素“项”

如何定义DataMember坐标,使其能够理解

非常感谢

这对我有用

#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|];}
#r“系统.运行时.序列化”
开放系统
开放系统.Text
open System.Runtime.Serialization
open System.Runtime.Serialization.Json
[]
类型geo={
[]
t:字符串
[]
坐标:float[]
}
让我们解码(s:字符串)=
让json=newDataContractJSonSerializer(typeof)
let byteArray=Encoding.UTF8.GetBytes(s)
let stream=新内存流(byteArray)
json.ReadObject(流):?>geo
让tw=”{
\“类型\”:“点\”,
\“坐标\:[-7.002648110.449961]
}"
设v=decode tw//val v:geo={t=“Point”;坐标=[|-7.002648;110.449961 |]}

参考System.Runtime.Serialization和System.Xml

(交互式:#r“System.Runtime.Serialization”)

opensystem.IO
open System.Runtime.Serialization.Json
开放系统.Xml
开放系统.Text
///对象转换为Json
让内部json(jsonString:string):'t=
使用ms=newmemoryStream(ascienceoding.Default.GetBytes(jsonString))

让obj=(new DataContractJsonSerializer(谢谢你的回复,但是字符串中没有\“要解码,所以我需要找到一种方法使它在没有它们的情况下工作(除了tw.Replace(“[”,@“\”[”).Replace(“],@“]),谢谢![-7.00268110.449961]不是字符串值,而是浮点数组,如果您修改了地理定义,那么坐标字段是float[],它应该可以解决这个问题。我已经修改了我的示例来演示this@RonaldWildenberg接受了!感谢关于如何编写
tw
定义而不患眼癌的小提示:使用
“”“
围绕字符串文字,您可以删除所有``内容并使用简单的旧JSON。
#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|];}
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