3

我想执行动态查询+部分序列化。

假设我有这样的资源:

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"}
}

我目前正在处理查询部分(表达式树你太强大了^^)

但是序列化部分我有很多选择,没有一个是非常令人满意的。如您所见,序列化的属性是动态指定的,因此属性修饰可能不是要走的路。

你会用什么,为什么?之后我会编辑这篇文章以分享您的建议。

4

1 回答 1

3

更改您的 Unicorn 类,确保使用可为空值并使用 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 进行选择,请参阅 >>动态 LINQ 示例。我假设您正在做一个 WCF REST 应用程序,在这种情况下,这将根据您的示例进行序列化。

于 2012-07-06T13:24:51.850 回答