Jam*_*min 61 c# asp.net-mvc couchdb json.net
我目前正在使用相同的C#DTO将数据从CouchDB中提取出来,通过LoveSeat,我将通过ASP MVC控制器返回JSON.
我正在使用NewtonSoft库来扫描我的DTO,然后通过控制器发送它们.
但是,由于CouchDB也使用NewtonSoft,因此它也尊重属性级别的NewtonSoft属性
[JsonIgnore]
[JsonProperty("foo")]
Run Code Online (Sandbox Code Playgroud)
有没有告诉newtonsoft库明确忽略这些属性?LoveSeat允许我提供我自己的IObjectSerializer,它让我可以完全控制netwonsofts JsonSerializerSettings.那么,通过这些设置我可以忽略这些属性吗?
我问,作为唯一的选择,我现在可以看到的是欺骗我的DTO.虽然并不可怕,但并不是很好.
我能看到的唯一另一种方法是将我自己版本的Newtonsoft.Json源码引入我的项目,使用不同的程序集名称等等.但这种方式疯狂绝对是谎言,我会在我离开之前欺骗DTO路.
Jim*_*mbo 85
我不确定这是不是你所追求的,但从我的理解你正在寻找[JsonIgnore]属性.阻止将属性与对象的其余部分序列化为JSON.
[JsonIgnore]
public string Whatever{ get; set; }
Run Code Online (Sandbox Code Playgroud)
小智 12
一个你可能不喜欢的建议.对于最佳实践,我建议使用两个几乎相同的对象.一个专门用于映射到数据库的数据访问层(域对象).以及您的应用所关注的单独DTO.这样,域对象将主要包含比DTO更多的属性,您可以分离关注点.
我最终创建了我需要的所有属性,只需将属性添加到虚拟,并使用相关的newtonsoft属性在另一个类中单独覆盖它们.
这允许我在从CouchDB反序列化和串行化GET时具有不同的序列化行为,而没有太多的欺骗.两者相结合是好的,也是奖励; 无论如何我想要的基数的任何变化.
知道我的原始问题是否可行仍然是一件好事?
您可以将方法添加到类中:public bool ShouldSerialize_________(){...}并在空白处输入不想序列化的属性的名称。如果该方法返回false,则该属性将被忽略。
如果经理是同一员工,则文档中的示例不希望序列化员工的经理。
public class Employee
{
public string Name { get; set; }
public Employee Manager { get; set; }
public bool ShouldSerializeManager()
{
// don't serialize the Manager property if an employee is their own manager
return (Manager != this);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在类上设置某种禁止设置:
public class DTO
{
[JsonIgnore]
public bool IsWritingToDatabase { get; set; }
public string AlwaysSerialize { get; set; }
public string Optional { get; set; }
public bool ShouldSerializeOptional()
{
return IsWritingToDatabase;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不比拥有两个对象简单得多。因此,我建议按照@zbugs所述进行操作,并为API端和DB端分别定义。
这个 newtonking.com 链接帮助了类似的情况。它扩展了DefaultContractResolver类。为了使它工作,我不得不更换
protected override IList<JsonProperty> CreateProperties(JsonObjectContract contract)
Run Code Online (Sandbox Code Playgroud)
和
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82450 次 |
| 最近记录: |