读取Json数据C#

时间:2015-05-26 11:58:13

标签: c# json asp.net-mvc-4

我在“我的控制器”中有以下方法

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模型?

4 个答案:

答案 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()将完成工作