相关疑难解决方法(0)

使用DataContractJsonSerializer将数组值反序列化为.NET属性

我正在使用Silverlight 4中的DataContractJsonSerializer,并希望反序列化以下JSON:

{
    "collectionname":"Books",
    "collectionitems": [
            ["12345-67890",201,
             "Book One"],
            ["09876-54321",45,
             "Book Two"]
        ]
}
Run Code Online (Sandbox Code Playgroud)

进入以下类:

class BookCollection
{
  public string collectionname { get; set; }
  public List<Book> collectionitems { get; set; }
}

class Book
{
  public string Id { get; set; }
  public int NumberOfPages { get; set; }
  public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

扩展DataContractJsonSerializer以将"collectionitems"中未命名的第一个数组元素映射到Book类的Id属性,NumberOfPages属性的第二个元素和Title的最终元素是什么?我无法控制此实例中的JSON生成,并希望该解决方案能够与.NET的Silverlight子集一起使用.如果解决方案也可以执行相反的序列化,那将是很好的.

c# serialization json

19
推荐指数
1
解决办法
1万
查看次数

在反序列化期间将JSON日期转换为.NET DateTime的正确方法

我有一个javascript函数,用JSON数据调用MVC控制器:

var specsAsJson = JSON.stringify(specs);
$.post('/Home/Save', { jsonData: specsAsJson });
Run Code Online (Sandbox Code Playgroud)

在服务器端,在控制器内,我似乎无法通过此错误:

/ Date(1347992529530)/不是DateTime的有效值.

当我调用Deserialize()(下面的方法中的第三行)时会发生异常:

    public ActionResult Save(string jsonData)
    {
        var serializer = new JavaScriptSerializer();
        serializer.RegisterConverters(new[] { new TimeSpanJsonConverter() });
        var specs = serializer.Deserialize<List<EquipmentSpecWithParameterlessConstructor>>(jsonData);

        return View("Index", _allTrackerJobs);
    }
Run Code Online (Sandbox Code Playgroud)

我一直在做一些谷歌搜索,上面的代码是我最近尝试使这项工作(从这里使用TimeSpanJsonConverter ).其他方法显示只向服务器发送日期,但我有一个对象列表,其中日期作为一些属性.

是否有一种优雅的,普遍接受的方法来解决这个问题,还是我们还需要某种丑陋的解决方法?解决这个问题的正确方法是什么?

===================原始问题结束===================


编辑 - 通过使用JsonConvert序列化解决

请参阅下面的答案(不是这个问题中糟糕的解决方法).


编辑 - 糟糕的解决方法

我创建了一个DTO,其字段与域对象完全相同,只是我将日期字段设置为字符串,以便反序列化.现在我可以反序列化它,我将努力将日期转换为有效的格式,以便我可以从我的DTO创建域对象.

public class EquipmentSpecDto
{
    public string StartTime { get; set; }
    public string EndTime { get; set; }
    // more properties here
}
Run Code Online (Sandbox Code Playgroud)

我只是使用DTO进行反序列化:

var specs = …
Run Code Online (Sandbox Code Playgroud)

javascript c# json stringify

15
推荐指数
2
解决办法
5万
查看次数

标签 统计

c# ×2

json ×2

javascript ×1

serialization ×1

stringify ×1