转换JObject“ToObject”时的异常

时间:2014-06-16 10:09:24

标签: c# json serialization json.net

我有一个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”?

1 个答案:

答案 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; }
}