使用JavascriptSerializer将自定义类型属性序列化为字符串

时间:2011-03-30 12:22:17

标签: c# json javascriptserializer

我现在使用.NET JavascriptSerializer类将我的对象序列化为JSON表示并在客户端使用它。只要我坚持使用int,string等默认类型,一切都很好。但是,现在我想在我的对象上序列化自定义类型属性。让我们看一下我班的一个例子:

public class ClientData 
{      
    public Guid Id { get; set; }
    public string Description { get; set; }
    public MyCustomObject ObjectX { get; set; }
}

我想要的是一个客户端对象,看起来像这样:

{ Id: 0000-0000-000-0000, Description: "some description", ObjectX: "125.20" }

为了使这项工作,我尝试使用JavaScriptConverter,但似乎没有解决问题,因为它只能处理字典,结果将如下所示:

{ Id: 0000-0000-000-0000, Description: "some description", ObjectX: { Value: "125.20"} }

这不是我想要的。顺便说一句,我确实在MyCustomObject类上实现了toString。

有什么建议吗?

感谢分配。

3 个答案:

答案 0 :(得分:0)

这是javascriptserializer的msdn页面: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

在评论部分中说:

  

要序列化对象,请使用Serialize方法。若要反序列化JSON字符串,请使用Deserialize或DeserializeObject方法。要序列化和反序列化JavaScriptSerializer本身不支持的类型,请使用JavaScriptConverter类实现自定义转换器。然后使用RegisterConverters方法注册转换器。

所以你应该看看这个课: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter.aspx

答案 1 :(得分:0)

使用Json.NET库中的JsonConverter似乎可以解决这个问题。

答案 2 :(得分:0)

您可以将自定义对象转换为字符串。您使用JavaScriptConverter将您的对象转换为也实现IDictionary的Uri实例,以允许它传递出JavaScriptConverter。

此处针对DateTime对象描述了此hack: http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/