Обычно вы хотите, чтобы это сериализовалось в объект со свойством и значением, хотя я полагаю, вы могли бы просто вернуть строку. Если вы возвращаете строку, вам не нужен JSON, вы можете использовать html или текст - любой из них будет работать (return Content( transactionType.ToString() );
). Если вы действительно хотите JSON, тогда я бы предложил просто настроить объект со свойством .
public class TransactionType
{
public string Value { get; set; }
}
Тогда вы можете сделать именно так, как вы пытаетесь:
[HttpPost]
public JsonResult Foo()
{
var transactionType = new TransactionType { Value = "foo" };
return Json(transactionType);
}
Это будет сериализовано в { "Value" : "foo" }
Обратите внимание, что в MVC3 JsonResult все еще использует JavaScriptSerializer. Если свойство должно быть приватным, вы можете использовать DataContractJsonSerializer, пометить свойство как DataMember (даже если приватное), сериализовать результат, а затем вернуть эту строку, используя ContentResult, но с MIME-типом «application / json».
public class TransactionType
{
public TransactionType( string type )
{
Value = type;
}
[DataMember]
private string Value { get; set; }
...
}
Затем вы можете (после изменения типа возвращаемого значения) создать метод для сериализации.
и вернуть результат содержимого, аналогичный методу Json ().
[HttpPost]
public ActionResult Foo()
{
var transactionType = new TransactionType( "foo" );
return DataContractJson(transactionType);
}
private ActionResult DataContractJson<T>( T obj ) where T : class
{
using (var stream = new MemoryStream())
{
var serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject( stream, obj );
var content = Encoding.UTF8.GetString( stream.ToArray() );
return Content( content, "application/json" );
}
}