如何使用DataContractJsonSerializer序列化匿名类型

本文关键字:类型 序列化 何使用 DataContractJsonSerializer | 更新日期: 2023-09-27 18:00:34

使用下面的代码,我如何使用DataContractJsonSerializer将结果列表转换为JSON?

ETA:我已经看到了几种用于一般JSON对象的扩展方法,但我不确定该使用什么类型,因为这是一种匿名类型。

<Product> products = GetProductList();
var orderGroups =
 from p in products
 group p by p.Category into g
 select new { Category = g.Key, Products = g };

谢谢!

如何使用DataContractJsonSerializer序列化匿名类型

您不能使用数据协定序列化程序来执行此序列化,因为匿名类型不定义任何协定。

DataContractSerializer使用[DataContract]和[DataMember]属性来决定应序列化哪些属性。但是,由于匿名类型是编译器生成的,因此它们无法接收属性。

[DataContract]
class Data
{
    [DataMember]
    public string Category{get;set;}
    [...]
}

事实上,我的观点是,如果客户端和服务器之间的接口是通过匿名类型定义的,那么您就做错了。

然而,您当然可以使用另一个序列化程序来执行此任务,但我不知道有任何递归序列化任何公共属性而不添加任何注释的情况。)

编辑:事实上,我完全知道可以使用什么将任意(因此是匿名)类序列化为json。使用出色的Json.NET库。

我刚才在这里看到的代码是一个扩展方法,它将把任何东西序列化为jsonhttp://pastebin.com/cUX82cJC