我在“我的控制器”中有以下方法
public JsonResult Data()
{
return Json(details
.Select(c => new { Height = c.Height, Width = c.Width })
.Distinct(),
JsonRequestBehavior.AllowGet);
}
我正在阅读下面的数据
public void ReadData()
{
var result = controller.Data() as JsonResult;
var model = result.Data;
}
如何正确地在ReadData 中投射 var模型?
答案 0 :(得分:1)
JsonResult数据将在jsonResult.ExecuteResult
调用期间进行迭代和序列化,但如果您只想要它将生成的json数据 - 您可以手动使用JsonResult
使用的相同json序列化程序。所以它会是这样的:
public void ReadData()
{
var result = controller.Data() as JsonResult;
var model = result.Data;
JavaScriptSerializer scriptSerializer = new JavaScriptSerializer();
string json = scriptSerializer.Serialize(model);
}
答案 1 :(得分:1)
您正在查看System.Linq.Enumerable.DistinctIterator<<>f__AnonymousType2<string,string>>
,因为这正是您返回的内容:具有两个字符串属性的匿名类型的可枚举。
你可以迭代:
var model = result.Data;
foreach (var dimension in model)
{
int h = dimension.Height;
int w = dimension.Width;
}
但是,如果API方法位于同一个项目中,您不想绕过JSON序列化和反序列化往返。
引入具体类型(而不是匿名类型)并更改API控制器的返回类型:
public class Dimension
{
public int Height { get; set; }
public int Width { get; set; }
}
public IEnumerable<Dimension> Data()
{
return details.Select(c => new Dimension { Height = c.Height, Width = c.Width }).Distinct();
}
或者将逻辑放在自己的类中:
public class DimensionGetter
{
public IEnumerable<Dimension> GetDimensions()
{
return details.Select(c => new Dimension { Height = c.Height, Width = c.Width }).Distinct();
}
}
从这两种方法中调用该类:
public JsonResult Data()
{
return Json(new DimensionGetter.GetDimensions(), JsonRequestBehavior.AllowGet);
}
public void ReadData()
{
var model = new DimensionGetter.GetDimensions();
}
答案 2 :(得分:0)
您可以手动使用JsonResult使用的相同json序列化程序。所以它会是这样的:
JavaScriptSerializer scriptSerializer = new JavaScriptSerializer();
string json = scriptSerializer.Serialize(model);
答案 3 :(得分:-1)
我认为DateTime.ParseExact("3:19 PM", "H:mm tt",
System.Globalization.CultureInfo.InvariantCulture).ToString();
和JavaScriptSerializer()
将完成工作