У меня есть пара стандартных веб-методов ASP.NET, которые я вызываю из javascript с параметром пользовательского класса в форме
[DataContract]
[KnownType(typeof(MyOtherSubclass))]
public class MyClass
{
[DataMember]
public MyOtherClass MyMember { get; set; }
}
, где MyOtherClass
- класс, помеченныйSerializable
, но не с атрибутом DataContract
(я не могу контролировать его генерацию).Есть пара подклассов MyOtherClass
, например MyOtherSubclass
:
[Serializable]
public class MyOtherSubClass : MyOtherClass
{
private string valueField;
public string Value
{
get { return valueField; }
set { valueField = value; }
}
}
Когда я использую DataContractJsonSerializer для сериализации объекта MyClass напрямую, я получаю результат, подобный
{ "MyMember" : { "__type" : "MyOtherSubClass:#Namespace", "valueField" : "xxx" } }
Однако, когда я передаю такой JSON в запрос веб-метода из javascript, я получаю исключение при десериализации.Я немного поэкспериментировал и обнаружил, что при использовании следующего
{ "MyMember" : { "___type" : "Namespace.MyOtherSubClass", "Value" : "xxx" } }
десериализация работает без проблем.
Есть ли способ настроить DataContractJsonSerializer таким образом, чтобыон будет производить JSON во второй форме, чтобы десериализация аргументов веб-метода работала?