繁体   English   中英

如何将从jquery接收到的字符串转换为c#动态对象?

[英]how to convert a string received from jquery to c# dynamic object?

我如何在我的C#WEBMETHOD ..中将作为json对象的字符串转换为动态字符串,以便可以使用它检索数据。

我的ajax调用示例

 function do_save_data()
    {
      $.ajax({
         type:"POST",
         url:"../mymethods/test.aspx/SaveUser",
         data:"{'profile':'"+objrecieved+"'}",
         contentType:"application/json; charset=utf-8",
         success:function(msg){}
      });

} 



[WebMethod]
public void save data(object profile)
{
    JavaScriptSerializer _myserliaser=new JavaScriptSerializer();
    dynamic data=(dynamic)_myserliaser.DeseralizeObject(profile);

    //problem here is it is taking it as a string.hence when it try
    string name=data.name.ToString();
    //error 'string' does not contain a definition for 'name'



}

谁能告诉我如何处理来自ajax调用的对象作为字符串并将其置于动态状态并获取其详细信息提前感谢

JavaScriptSerializer将JSON字符串序列化为Dictionary,您不能只是将其强制转换为动态,否则会丢失属性,最好的选择是将字典转换为可轻松转换为动态的ExpandoObject。 这是这样做的扩展方法:

public static class JavaScriptSerializerExtension
{
    public static dynamic DeserializeDynamic(this JavaScriptSerializer serializer, string value)
    {
        var dic = serializer.Deserialize<IDictionary<string, object>>(value);
        return ToExpando(dic);
    }

    private static ExpandoObject ToExpando(IDictionary<string, object> dic)
    {
        var expando = new ExpandoObject() as IDictionary<string, object>;

        foreach (var item in dic)
        {
            var prop = item.Value as IDictionary<string, object>;
            expando.Add(item.Key, prop == null ? item.Value : ToExpando(prop));
        }

        return (ExpandoObject)expando;
    }
}

您可以使用JavaScriptSerializer对象的DeserializeDynamic扩展方法反序列化为动态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM