2009-10-19 61 views
2

在rails中,您可以執行以下操作將對象轉換爲Json,但只能使用對象中包含的字段子集。to_json(rails)對於ASP.NET MVC/.NET的類似功能

@user.to_json :only => [ :name, :phone ] 

儘管我使用的是當前的ASP.NET MVC Json()函數,但它並不讓我定義要將哪些字段包含在轉換中。所以我的問題是在JSON.NET中是否有一個函數,否則它會在轉換成json之前接受特定的字段。

編輯:你的答案也應該覆蓋數組場景,即。

@users.to_json :only => [ :name, :phone ] 

回答

3

你可以使用匿名類型:

public ActionResult SomeActionThatReturnsJson() 
{ 
    var someObjectThatContainsManyProperties = GetObjectFromSomeWhere(); 
    return Json(new { 
     Name = someObjectThatContainsManyProperties.Name, 
     Phone = someObjectThatContainsManyProperties.Phone, 
    }); 
} 

將返回{"Name":"John","Phone":"123"}


UPDATE:

同樣的技術可用於數組場景:

public ActionResult SomeActionThatReturnsJson() 
{ 
    var users = from element in GetObjectsFromSomeWhere() 
       select new { 
        Name = element.Name, 
        Phone = element.Phone, 
       }; 
    return Json(users.ToArray()); 
} 
+0

檢查我的編輯/ 15chars – Konstantinos 2009-10-19 09:25:32

+0

匿名類型也可以應用於數組。 – 2009-10-19 12:01:26

+0

嗯不壞:)/c – Konstantinos 2009-10-19 12:06:26

1

這是一個擴展方法:

public static string ToJSONArray<T>(this IEnumerable<T> list) 
    { 
     DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(IEnumerable<T>)); 
     MemoryStream ms = new MemoryStream(); 
     s.WriteObject(ms, list); 
     return GetEncoder().GetString(ms.ToArray()); 
    } 

    public static IEnumerable<T> FromJSONArray<T>(this string jsonArray) 
    { 
     if (string.IsNullOrEmpty(jsonArray)) return new List<T>(); 

     DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(IEnumerable<T>)); 
     MemoryStream ms = new MemoryStream(GetEncoder().GetBytes(jsonArray)); 
     var result = (IEnumerable<T>)s.ReadObject(ms); 
     if (result == null) 
     { 
      return new List<T>(); 
     } 
     else 
     { 
      return result; 
     } 
    } 

它是數組,但你可以輕鬆適應它。

0

使用Json.NET,您可以將[JsonIgnore]屬性放置在不想序列化的屬性上。