如何在我的c#WEBMETHOD..so中将一个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调用的对象作为字符串并将其置于动态并获取其详细信息 提前致谢
答案 0 :(得分:0)
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扩展方法反序列化为动态