假设我编写以下C#代码来定义Web方法:
public class Thing
{
public string X {get;set}
public string Y {get;set}
}
[WebMethod]
public static void myFunction(Thing thing) { }
我发现我可以使用看起来像这样的jQuery JavaScript调用该函数:
var myData = { X: "hello", Y: "world" };
var jsonData = JSON.stringify(myData);
jQuery.ajax({ data: jsonData, ...
当调用myFunction
时,thing.X
设置为“hello”,thing.Y
设置为“world”。 .net框架究竟做了什么来设置thing
的值?它是否会调用构造函数?
答案 0 :(得分:2)
就像你可以像这样创造事情
Thing x = new Thing { X = "hello", Y = "world" }
所以不,它不会调用构造函数来回答你的问题。
好的,更详细......
它需要JSON并反序列化它。它从您的JSON对象填充属性。例如,如果您在JSON中有以下内容:
{"notRelated":0, "test": "string"}
序列化程序找不到X或Y的东西,并将它们设置为该数据类型的默认值。
让我们说你想要更深入。您可以自定义序列化和反序列化对象:
[Serializable]
public class MyObject : ISerializable
{
public int n1;
public int n2;
public String str;
public MyObject()
{
}
protected MyObject(SerializationInfo info, StreamingContext context)
{
n1 = info.GetInt32("i");
n2 = info.GetInt32("j");
str = info.GetString("k");
}
[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("i", n1);
info.AddValue("j", n2);
info.AddValue("k", str);
}
}
所以你可以看到,在你的情况下,X
和Y
正在捕捉参数。