我在web api 2中使用的是DataContractJsonSerializer还是Json.net



在问了这个问题之后,我试图掌握webapi2中的所有序列化内容,我读到了http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization

但现在我很困惑

1在我的webapiconfig中,我没有这行

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.UseDataContractJsonSerializer = true;

所以我估计我使用的是Json.net序列化程序,它是默认的。无论如何,我仍然可以在类中使用DataContract,因此只有用DataMember属性修饰的属性才会被序列化。这两个假设正确吗?

2如果我不用DataContract修饰一个类,那么所有的属性都将被序列化。Json.net和DataContractJsonSerializer 都会发生这种情况

3如果我更改(如我链接的问题中所述)解析器,序列化程序仍然使用它,是因为它是Json.net,还是一件事与另一件事无关?因为如果我在全球中使用这个

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.UseDataContractJsonSerializer = true;
json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

即使它没有引起任何问题,它似乎也不会接受(也不会使用自定义的contractresolver)

3如果我有一个派生自另一个类的类,并且我用DataContract装饰父类,那么在我看来,我必须用DataMember装饰子类的属性才能序列化它。或者我做错了什么?

感谢

所以我估计我使用的是Json.net序列化程序,它是默认的。无论如何,我仍然可以在类中使用DataContract,因此只有用DataMember属性修饰的属性才会被序列化。这两个假设正确吗?

Json.Net是默认的,你是对的。两个序列化程序都支持DataMembers。Json.Net不需要它们。

2如果我不用DataContract修饰一个类,那么所有的属性都将被序列化。Json.net和DataContractJsonSerializer 都会发生这种情况

DataContractJsonSerializer用于WCF客户端应用程序,其中序列化的类型通常是应用了DataContract属性的POCO类。没有DataContract,没有序列化。WCF的映射机制使发送和接收非常简单,但前提是您的平台是同构的。如果您开始混合使用不同的工具集,您的程序可能会出现问题。

JavaScriptSerializer可以序列化任何类型,包括匿名类型(单向),并以更一致的方式进行序列化。您失去了WCF的"自动魔术",但获得了更多的集成选项。

3如果我更改(如我链接的问题中所述)解析器,序列化程序仍然使用它,是因为它是Json.net,还是一件事与另一件事无关?因为如果我在全球中使用这个

将代码放在Global.asax中,应使用DataContractJsonSerializer。你怎么知道它没有被捡起来?

4如果我有一个派生自另一个类的类,并且我用DataContract装饰父类,那么在我看来,我必须用DataMember装饰子类的属性才能序列化它。

是的。如果使用DataContractJsonSerializer。

相关内容

  • 没有找到相关文章

最新更新