Что именно происходит в .net, когда вызов веб-службы анализирует объект JSON? - PullRequest
2 голосов
/ 12 июля 2011

Предположим, я пишу следующий код C # для определения веб-метода:

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 устанавливается на "привет", а thing.Y на "мир". Что конкретно делает .net framework для установки значения thing? Вызывает ли он конструктор?

1 Ответ

2 голосов
/ 12 июля 2011

Точно так же, как вы можете создать Вещи вот так

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.

...