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
这会返回 - >
结束元素'坐标'来自命名空间''预期。从命名空间''找到元素'item'
如何定义DataMember坐标以便它理解?
非常感谢
参考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
参考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
这对我有用
#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|];}