【问题标题】:to_json (rails ) similar function for ASP.NET MVC / .NET用于 ASP.NET MVC / .NET 的 to_json (rails) 类似函数
【发布时间】:2009-10-19 07:44:27
【问题描述】:

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

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

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

编辑:您的答案也应该涵盖数组场景,即。

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

【问题讨论】:

    标签: c# asp.net-mvc json


    【解决方案1】:

    你可以使用匿名类型:

    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】:

    这是一个扩展方法:

        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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        相关资源
        最近更新 更多