Проблема здесь заключается в том, что JavaScriptSerializer.Serialize()
принимает аргумент object
, а не универсальный тип, и сериализует объект на основе сигнатуры его класса, а не интерфейса, к которому вы приводите.JavaScriptSerializer
довольно старый (возможно, не рекомендуется), и в настоящее время рекомендуется использовать Newtonsoft.Json или другой сериализатор.
Однако, если у вас нет выбора, кроме как использовать JavaScriptSerializer
, тогдаВы можете аннотировать свойства и поля, которые вы не хотите сериализовать, с помощью атрибута ScriptIgnore
.
В классе Stam
:
[ScriptIgnore]
public int b = 0;
Вызовите, как раньшено нет необходимости разыгрывать:
Stam s = new Stam();
JavaScriptSerializer jss = new JavaScriptSerializer();
Console.WriteLine(jss.Serialize(s));
Вывод:
{"a":0}
Если вам нужна большая гибкость, и снова, если вы не можете перейти на более современный сериализатор, тогдавам нужно написать JavaScriptConverter .