具有动态的ServiceStack.Text json序列化器

时间:2013-01-16 09:56:43

标签: c# json serialization jsonserializer

我正在使用 ServiceStack.Text 库来序列化动态生成的对象(匿名类型)

它就像魅力一样,但有一种情况它会给我以下错误

Unable to cast object of type '<>f__AnonymousType14`2[System.String,<>f__AnonymousType2`10[System.String,System.String,System.String,System.String,System.Int32,System.Int32,System.Int32,System.String,System.String,System.String]]' to type '<>f__AnonymousType14`2[System.String,<>f__AnonymousType13`3[System.String,System.Int32,System.String]]'.

情况是,这是一种搜索方法,它使用不同类型的数据中的关键字进行搜索,并使用c#dynamic返回结果,如下所示

dynamic data = new
                {
                 ResultType = "Place",
                 Data = new
                         {
                          Name = place.Name,
                          Address = place.Address,
                         }
                 };

另一种类型可能是Data子类型

中具有更多或更少属性的类似内容

然后我将这些data对象添加到List对象,它工作得很好,我可以在调试中看到结果,

enter image description here

但是一旦我去了序列化程序,就会给我这个错误

你能帮助我吗?

编辑: 我通过使用 Dictionary 而不是 List 部分地解决了这个问题,其中我使用Key作为对象类型,使用Value作为结果行

var dicResult = new Dictionary<string, dynamic>();
....
dicResult.Add("Category", new
                                      {
                                        Foo = "bar",
                                        .....
                                      }

dicResult.Add("Place", new
                                      {
                                        FooInt = 123,
                                        .....
                                      }

结果就像这样

{
    .....
    "Data": [
        {
            "Key": "Category",
            "Value": {
                "Foo": "bar",
                ....  
            }
        },
        {
            "Key": "Place",
            "Value": {
                "FooInt": 123,
                .....
             }
        }]
}

但我仍在寻求更好的解决方案

0 个答案:

没有答案