我正在使用 MVC 4 网络 API,并 asp.net Web 表单 4.0 来构建一个静态 API。它工作得很好:
[HttpGet]
public HttpResponseMessage Me(string hash)
{
HttpResponseMessage httpResponseMessage;
List<Something> somethings = ...
httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK,
new { result = true, somethings = somethings });
return httpResponseMessage;
}
现在我需要阻止一些属性被序列化。我知道我可以在列表上使用一些LINQ,只获取我需要的属性,通常这是一个很好的方法,但是在目前的场景中,某物
对象太复杂了,我需要在不同的方法中使用不同的属性集,所以在运行时更容易标记要忽略的每个属性。
有没有办法做到这一点?
默认情况下,您可以采用“选择加入”方法,而不是让所有内容都序列化。在这种情况下,只允许您序列化您指定的属性。您可以使用“数据合同属性”
和“数据成员属性”
执行此操作,这些属性位于“系统.运行时.序列化”命名空间中。
DataContactAt⃣
应用于类,DataMemberAt⃣
应用于要序列化的每个成员:
[DataContract]
public class MyClass {
[DataMember]
public int Id { get; set;} // Serialized
[DataMember]
public string Name { get; set; } // Serialized
public string DontExposeMe { get; set; } // Will not be serialized
}
我敢说这是一种更好的方法,因为它迫使您通过序列化来明确决定什么会或不会成功。它还允许您的模型类单独存在于项目中,而不必仅仅因为在其他地方使用 JSON.net 序列化它们而依赖于 JSON.net。
根据 Web API 文档页中的 JSON 和 XML 序列化 ASP.NET Web API 中要显式阻止对属性的序列化,您可以将 [JsonIgnore]
用于 Json 序列化程序,或者将 [忽略数据记忆]
用于默认的 XML 序列化程序。
但是,在测试中,我注意到 [IgnoreDataMember]
会阻止 XML 和 Json 请求的序列化,因此我建议使用它,而不是使用多个属性来修饰属性。
ASP.NET Web API使用< code>Json。Net作为默认格式化程序,因此,如果您的应用程序只使用JSON作为数据格式,您可以使用< code>[JsonIgnore]忽略用于序列化的属性:
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public List<Something> Somethings { get; set; }
}
但是,这种方式不支持XML格式。所以,万一你的应用必须更多地支持XML格式(或者只支持XML),而不是使用< code>Json。Net时,您应该使用同时支持JSON和XML的< code>[DataContract]:
[DataContract]
public class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
//Ignore by default
public List<Something> Somethings { get; set; }
}
要了解更多信息,您可以阅读官方文章。
问题内容: 我正在编写自己的ContentProvider,它将使用SyncAdapter同步到Web服务。 当同步适配器修改内容提供者的数据时,问题会发生,当内部调用getContentResolver()。notifyChange导致同步循环时,提供者触发网络同步。 客户端应用程序进行修改时,需要带有网络同步标志的notifyChange,但在修改同步适配器时应避免使用notifyChange
我有几个配置文件,比如: application.yaml 我想我需要一些定制属性spring Binder.class定制,但我找不到任何解决方案。 提前感谢!
问题内容: 我如何才能序列化一个特定的属性,但又防止其反序列化回POCO?是否可以使用属性装饰特定属性? 基本上,我正在寻找一个与ShouldSerialize *方法等效的反序列化方法。 我知道我可以编写一个自定义转换器,但是这样做似乎有点过头了。 编辑: 这里还有一些背景。这背后的原因是我的课看起来像: 我需要请求的属性,但是我不希望它反序列化并触发设置程序逻辑。 问题答案: 最简单的方法是将
问题内容: 我有多态类型,并且可以从JSON反序列化为POJO。实际上,我遵循这里的文档。将POJO序列化为JSON时,我得到了不需要的属性,特别是逻辑类型名称。 当Jackson序列化为JSON时,它提供了我不想公开的类型信息。 我可以以某种方式防止这种情况吗?反序列化时我只想忽略。 问题答案: 一个简单的解决方案是将和配置移至,然后仅注册进行反序列化。
问题内容: 我正在用来创建用户并处理身份验证。 当我尝试通过方法通过简单登录创建新用户时,如果已经使用了电子邮件地址,firebase不会创建该用户。但是,在创建用户并将其用作密钥之后,我还用于将创建的用户保存到我的Firebase中。尝试写入数据库时,即使用户名不是唯一的,firebase也会保存记录,因为简单登录只需要电子邮件和密码。因此,当用户名不用作用户对象的密钥时,如何验证其唯一性?
我有一个类,它用Data合同和Data会员属性进行了注释。一些成员被标记为。当我通过Json的线路序列化实例时。NET,并且所需的对象成员具有空值,然后它们的序列化值在输出中丢失(这显然相当于在JSON中为空)。我没意见。 我创建了一种“echo”服务,它返回作为响应发送给它的数据。因此,此服务接收缺少成员的JSON(或空成员,具体取决于您如何看待它),然后将其发送回我的JSON。NET客户端。通