这可能是一种非常罕见的情况,但我最终遇到了问题而没有找到任何解决方案。
我在C#中使用MVC WebAPI编写了一个WebAPI控制器。我有一个post方法接收自定义对象。
[HttpPost]
public HttpResponseMessage SendEmail([FromBody]Email email)
{
}
以下是电子邮件类,请注意,EmailData属于dynamic
类型。
public class Email
{
public string EmailTo { get; set; }
public dynamic EmailData { get; set; }
}
当我发送JSON
个有效负载作为帖子时,EmailData属性会在对象中添加额外的花括号“{}”。这给了我一个问题,因为我的动态数据无法使用额外的大括号“{}”来解析JSON
。
{
"EmailFrom": "abc.xyz@abc.com",
"EmailData": {
"FirstName": "Rushi",
"LastName": "Joshi"}
}
如果由于dynamic
类型而发生这种情况,那么我不想更改类型,因为我不确定所有键/值请求者可能发送的内容。我正在使用dynamic
数据从中提取数据。
这表示正在解析EmailData并添加额外的花括号。
答案 0 :(得分:3)
使用Dictionary
对象代替动态,它将绑定您的键值对数据
public class Email
{
public string EmailTo { get; set; }
public Dictionary<string,string> EmailData { get; set; }
}
你的json将会,
{
"EmailTo": "abc.xyz@abc.com",
"EmailData": {
"FirstName": "Rushi",
"LastName": "Joshi"}
}
答案 1 :(得分:0)
提供的JSON有效: https://jsonlint.com/
具有多个属性的对象将始终以该格式返回。
"EmailData": {
"FirstName": "Rushi",
"LastName": "Joshi"}
这是一个具有两个名称/值对的EmailData对象。您的对象嵌套在原始对象中。
以下是一些文档供您阅读以供进一步说明。 https://www.json.org/
答案 2 :(得分:0)
如果要将动态JSON存储在Email类中,则可以使用Newtonsoft.Json包。
public class Email
{
public string EmailTo { get; set; }
public JOject EmailData { get; set; }
}
它将存储任何类型的JSON。因此,您可以在运行时解析内部JSON对象。
答案 3 :(得分:0)
谢谢大家,是的,你们都给了一个很好的答案,特别感谢Stevenfowler16,他们描述了JSON对象应该被处理的正确方法。
事情是我无法删除动态对象类型,因为它来自其他一些库,我也无法将任何内容更改为API的签名。但是下面的事情帮了我。
import React from 'react';
import {Editor, ConvertFromRaw} from 'draft-js';
const ReadOnlyEditor = (props) => {
const storedState = ConvertFromRaw(JSON.parse(props.storedState));
return (
<div className="readonly-editor">
<Editor editorState={storedState} readOnly={true} />
</div>
);
}
这符合我的目的,但再次感谢大家,您的解决方案为我提供了一些方向。
此致
如是