在本教程的上下文中,F#片段http://www.fssnip.net/1l/title/Convert-an-object-to-json-and-json-to-object
比方说一个人
type Person = {
entityName: string;
entityType: string;
}以及调用web服务并转换为json的代码。
let internal json<'t> (myObj:'t) =
use ms = new MemoryStream()
(new DataContractJsonSerializer(typeof<'t>)).WriteObject(ms, myObj)
Encoding.Default.GetString(ms.ToArray())
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
let requestToken (): Token =
let url = "http://example.com"
let request = WebRequest.Create(url) :?> HttpWebRequest
request.Method <- "POST"
request.Accept <- "application/json;charset=UTF-8"
let response = request.GetResponse() :?> HttpWebResponse
use reader = new StreamReader(response.GetResponseStream())
let body = reader.ReadToEnd()
Console.WriteLine body // result OK
let result = unjson<Person> bodyJSON
{
"entityName": "john doe",
"entityType": "client"
}误差
System.Runtime.Serialization.SerializationException:数据契约类型'Person‘无法反序列化,因为找不到所需的数据成员'entityName@,entityType@’。
result对象将对象转换回JSON字符串type是否需要按照JSON模式拥有所有字段,还是我可以选择省略非必需字段?发布于 2018-03-15 03:26:52
这将使用DataContractSerializer将记录序列化为JSON。您需要添加一些属性才能使其工作。
#r "System.Runtime.Serialization"
open System.IO
open System.Runtime.Serialization.Json
open System.Runtime.Serialization
[<DataContract>]
[<CLIMutable>]
type Person = {
[<DataMember(Name="Name") >]
entityName: string
[<DataMember(Name="Type") >]
entityType: string
}
let person = {entityName = "ENTITY"; entityType ="TYPE"}
let toJson<'t> (myObj:'t) =
let fs = new FileStream(@"C:\tmp\test.json",FileMode.Create)
(new DataContractJsonSerializer(typeof<'t>)).WriteObject(fs,myObj)
toJson<Person> person这是我在test.json文件中得到的输出:
{“名称”:“实体”,“类型”:“类型”}
https://stackoverflow.com/questions/49290554
复制相似问题