首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象对象和对象对象

对象对象和对象对象
EN

Stack Overflow用户
提问于 2018-03-15 02:20:12
回答 1查看 635关注 0票数 1

在本教程的上下文中,F#片段http://www.fssnip.net/1l/title/Convert-an-object-to-json-and-json-to-object

比方说一个人

代码语言:javascript
复制
type Person = {
    entityName: string; 
    entityType: string; 
}

以及调用web服务并转换为json的代码。

代码语言:javascript
复制
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> body

JSON

代码语言:javascript
复制
{
    "entityName": "john doe",
    "entityType": "client"
}

误差

System.Runtime.Serialization.SerializationException:数据契约类型'Person‘无法反序列化,因为找不到所需的数据成员'entityName@,entityType@’。

  1. 如果有人可以添加一个关于如何调用' JSON‘函数的示例,传递result对象将对象转换回JSON字符串
  2. Person type是否需要按照JSON模式拥有所有字段,还是我可以选择省略非必需字段?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 03:26:52

这将使用DataContractSerializer将记录序列化为JSON。您需要添加一些属性才能使其工作。

代码语言:javascript
复制
#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文件中得到的输出:

{“名称”:“实体”,“类型”:“类型”}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49290554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档