代码之家  ›  专栏  ›  技术社区  ›  Kostas Konstantinidis

与ASP.NET MVC/.NET类似的函数

  •  2
  • Kostas Konstantinidis  · 技术社区  · 15 年前

    在Rails中,您可以执行以下操作将对象转换为JSON,但只能使用对象中包含的字段子集。

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

    虽然我目前使用的是ASP.NET MVC JSON()函数,但它不允许我定义要在转换中包含哪些字段。所以我的问题是,在JSON.NET中是否有一个函数,或者在转换为JSON之前接受特定的字段。

    编辑:你的答案也应该包括数组场景。

    @users.to_json :only => [ :name, :phone ]
    
    3 回复  |  直到 15 年前
        1
  •  3
  •   Darin Dimitrov    15 年前

    您可以使用匿名类型:

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

    会回来的 {"Name":"John","Phone":"123"}


    更新:

    同样的技术也可用于阵列场景:

    public ActionResult SomeActionThatReturnsJson()
    {
        var users = from element in GetObjectsFromSomeWhere()
                    select new {
                        Name = element.Name,
                        Phone = element.Phone,
                    };
        return Json(users.ToArray());
    }
    
        2
  •  1
  •   Arthur    15 年前

    下面是一个扩展方法:

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

    它是用于数组的,但您可以很容易地对其进行调整。

        3
  •  0
  •   James Newton-King dbc    15 年前

    使用json.net,可以将[jsonignore]属性放在不希望序列化的属性上。