Как я понимаю, вы хотите иметь возможность вручную сериализовать объект, но при этом использовать классы сериализации от .NET к Json.
В этом случае вы можете использовать класс JavaScriptSerializer . Вы можете зарегистрировать конвертер для этого класса, и в этом случае вы полностью контролируете сериализацию передаваемого вами объекта. Перезаписываемый метод Serialize возвращает простой IDictionary, который затем будет напрямую сериализован в json.
Вот пример того, как это выглядит ..
void Main()
{
var js = new JavaScriptSerializer();
js.RegisterConverters(new[] { new PonySerializer() });
js.Serialize(new Bar { Foo = 5 }).Dump();
}
public class PonySerializer : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get { return new [] { typeof(Bar) }; }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var result = new Dictionary<string, object>();
if (obj is Bar)
{
var ob = obj as Bar;
result["Foo"] = ob.Foo;
}
return result;
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
}
public class Bar
{
public int Foo { get; set; }
}