我有一个Post函数,它接收一个JObject(Newtonsoft Json)作为后变量。
现在我需要这个作为JObject,因为我有基于其他信息的“真实类型”,我需要额外的灵活性(我不能使用泛型和其他选项)。
现在我正在使用此代码:
JObject data; // this is assigned with the data from the post.
Type type = getTypeFromSomeWhere(param1);
object obj = data.ToObject(type); // I need this since I reflect the object later on.
我的输入数据如下所示:
{
"Disclaimer": {},
"Name": {
"IsRelevant": true,
"Value": "Sample Name"
},
}
我正在尝试将对象转换为此类型:
public class MyEntity
{
public string Disclaimer{ get; set; }
public Field<string> Name{ get; set; } // Field has Value\IsRelevant and other stuff.
}
我遇到了这个例外:
{"Error reading string. Unexpected token: StartObject. Path 'Disclaimer'."}
我试图理解为什么会这样。该对象看起来不错。我想这是由于空对象免责声明,但我需要支持这些情况。
修改
当我在免责声明中插入一个字符串时,一切正常
我如何告诉他在空对象中插入“null”?
答案 0 :(得分:3)
您的映射不正确。免责声明是一个对象,因为它被定义为{}
。
{
"Disclaimer": {}, //this is an OBJECT
"Name": {
"IsRelevant": true,
"Value": "Sample Name"
},
}
这就是为什么你得到错误{"Error reading string. Unexpected token: StartObject. Path 'Disclaimer'."}
,因为JSON.NET找到了{
,你试图将它映射到一个字符串。
至于Name
,它也是一个对象。我不知道你的Field<T>
是什么样的,但只要它有Value
属性就可以了。
正确的模型:
public class Disclaimer
{
}
public class MyEntity
{
public string Disclaimer{ get; set; }
public Field<string> Name { get; set; }
}