我有一个用于公开引用数据的REST API。有时API可以采用特定参数来提供数据。
一般用法:http://blah.com/quotes?symbol=MSFT
具体用法:http://blah.com/quotes?symbol=MSFT¶ms=[Symbol,Sector,Industry]
DTO:
public class QuoteDto
{
public string CompanyName { get; private set; }
public string Symbol { get; private set; }
public string Exchange { get; private set; }
public string Sector { get; private set; }
public string Industry { get; private set; }
. . .
}
在一般用法中我只是将我的DTO序列化为Json。但是当我得到特定的请求时,如何在序列化之前从我的dto中过滤掉不需要的参数?
是否有任何第三方lib来执行此操作?我可以使用反射,但这是不可思议的方式。 我正在使用ASP.NET MVC和C#
答案 0 :(得分:0)
混合使用两种技巧 - 首先是编写自己的json结果。
Control serializer in JsonResult aka Json function in ASP.Net MVC?
其次,不要使用ex。 javascriptserializer,你会反过来使用JSON.Net手动进行序列化。这样,您可以根据规则排除所需的任何属性。来自其网站的代码块显示其序列化非常简单 http://james.newtonking.com/projects/json/help/ReadingWritingJSON.html
StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonWriter jsonWriter = new JsonTextWriter(sw)) { jsonWriter.Formatting = Formatting.Indented; jsonWriter.WriteStartObject(); jsonWriter.WritePropertyName("CPU"); jsonWriter.WriteValue("Intel"); jsonWriter.WritePropertyName("PSU"); jsonWriter.WriteValue("500W"); jsonWriter.WritePropertyName("Drives"); jsonWriter.WriteStartArray(); jsonWriter.WriteValue("DVD read/writer"); jsonWriter.WriteComment("(broken)"); jsonWriter.WriteValue("500 gigabyte hard drive"); jsonWriter.WriteValue("200 gigabype hard drive"); jsonWriter.WriteEnd(); jsonWriter.WriteEndObject(); }
答案 1 :(得分:0)
我使用NHibernate相当多,但它比我需要发送JSON中的所有内容更多。
虽然hacky,我喜欢使用Dictionary<string, object>
,然后只添加我想发送的成员。
return Json(someDict);