序列化数据传输对象后,从 Web API 2 到客户端的值均为空
Values coming from the Web API 2 to the client are null after Serializing a Data transfer Object
Class实施
[Serializable]
public class Apple
{
string name{get;set;}
}
这驻留在服务器端并来自 Web API2 并且正在返回一个苹果对象。如果我不使用 serializable
属性,我会从客户端获取正确的值,但如果我使用 Serialized,我会得到 null 的名称。我该如何解决这个问题?
您不必指定 [Serializable] 属性,因为 Asp.Net WebApi 默认情况下会序列化您的 public 属性,无论您指定与否。你得到空对象的原因是你重新调整的 json 不是正常的形式。
第一个解决方案:
如果你真的想使用 [Serializable] 属性,那么你需要配置 Serializer formatter (json or xml) in WebApi 2 并且你需要使用 [DataContract] 和 [DataMember] 以及 [Serializable].
[Serializable]
[DataContract]
public class Apple
{
[DataMember]
string name{get;set;}
}
第二个解决方案:
您可以配置 Serializer 以忽略 [Serializable] 属性。通过这样做,您不必像我上面指定的那样使用 class 添加额外的属性。
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver = (DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;
Class实施
[Serializable]
public class Apple
{
string name{get;set;}
}
这驻留在服务器端并来自 Web API2 并且正在返回一个苹果对象。如果我不使用 serializable
属性,我会从客户端获取正确的值,但如果我使用 Serialized,我会得到 null 的名称。我该如何解决这个问题?
您不必指定 [Serializable] 属性,因为 Asp.Net WebApi 默认情况下会序列化您的 public 属性,无论您指定与否。你得到空对象的原因是你重新调整的 json 不是正常的形式。
第一个解决方案: 如果你真的想使用 [Serializable] 属性,那么你需要配置 Serializer formatter (json or xml) in WebApi 2 并且你需要使用 [DataContract] 和 [DataMember] 以及 [Serializable].
[Serializable]
[DataContract]
public class Apple
{
[DataMember]
string name{get;set;}
}
第二个解决方案: 您可以配置 Serializer 以忽略 [Serializable] 属性。通过这样做,您不必像我上面指定的那样使用 class 添加额外的属性。
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver = (DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;