我想执行动态查询+部分序列化。
假设我有这样的资源:
public class Unicorn
{
public string Id { get; set; }
public string Color { get; set; }
public int Size { get; set; }
public DateTime BirthDate { get; set; }
}
用户可以像这样制作部分RESTful请求:
GET /unicorn/{id}/?fields=id,color
如果请求XML,结果应为:
<Unicorn>
<Id>10</Id>
<Color>Purple</Color>
</Unicorn>
对于Json
{"Unicorn":
{"Id":10,
"Color":"Purple"}
}
我目前正致力于查询部分(表达树你是如此强大^^)
但是我对序列化部分有很多选择,其中没有一个非常令人满意。如您所见,序列化属性是动态指定的,因此可能无法进行属性修饰。
你会用什么?为什么? 之后我会编辑这篇文章,分享您的建议。
答案 0 :(得分:3)
更改您的Unicorn类,确保使用nullables并使用EmitDefaultValue = false标记成员:
[DataContract]
public class Unicorn {
[DataMember (EmitDefaultValue=false)]
public string Id { get; set; }
[DataMember (EmitDefaultValue=false)]
public string Color { get; set; }
[DataMember (EmitDefaultValue=false)]
public int? Size { get; set; }
[DataMember (EmitDefaultValue=false)]
public DateTime? BirthDate { get; set; }
}
使用动态LINQ进行选择请参阅&gt;&gt; Dynamic LINQ example。我假设你正在做一个WCF REST应用程序,在这种情况下,这将根据你的例子进行序列化。