Я звоню на веб-сервис asp.net с JQuery и ajax, передавая данные с помощью json.Я создаю объекты javascript, которые будут строковыми.Мне нужен мой веб-метод для извлечения этих конкретных типов объектов, но мой тип параметра является базовым классом, и эти объекты наследуются от моего базового класса следующим образом:
[DataContract]
[KnownType(typeof(TextareaObject))]
[KnownType(typeof(TextObject))]
public class FormElement
{
public FormElement()
{}
}
и:
[DataContract(Name = "textObject")]
public class TextObject : FormElement
{
[DataMember]
public string question { get; set; }
public TextObject(string question)
{
this.question = question;
}
}
имой webmethod:
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
[ServiceKnownType(typeof(TextObject))]
[ServiceKnownType(typeof(TextareaObject))]
public void SaveForm(List<FormElement> formobjects)
{
...
}
И вот как я создаю объекты JavaScript (я копирую только соответствующие образцы моего кода):
//objects to serialize
function textObject(question) {
this.question = question;
}
//objects to serialize
function textareaObject(question, rownumber) {
this.question = question;
this.rownumber = rownumber;
}
var objectarray = new Array();
if (type == 'text') {
textobject1 = new textObject(typedquestion);
objectarray.push(textobject1);
}
else if (type == 'textarea') {
var rownumber = $(elm).children('textarea').attr('rows');
textareaobject1 = new textareaObject(typedquestion, rownumber);
objectarray.push(textareaobject1);
}
var formobjects = JSON.stringify(objectarray);
$.ajax({
type: "POST",
//Page Name (in which the method should be called) and method name
url: urlhtml,
data: '{"formobjects":' + formobjects + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//dosmth
}
});
И я хочу, чтобы сервер asp.netбыть в состоянии десериализовать правильный тип в моем массиве.Но однажды в моем веб-методе все «объекты формы» имеют тип FormElement, я не могу получить их реальный тип даже с атрибутами serviceknowntype.Это потому, что яваскрипт не является строго типизированным, что я не могу получить конкретные типы?потому что строковый JSON не даст конкретный тип?Я попытался с
textObject.prototype = new textObject(typedquestion);
objectarray.push(textObject.prototype);
, а json выдает что-то вроде:
{"formobjects":{"textObject": {"question":"test"}}}
Но на стороне сервера все тот же старый, тот же старый, я получаю только тип FormElement в своем веб-методе и не могу привести.
может быть, то, что я хочу сделать, не возможно .. все равно спасибо !!