如何在反序列化之前将json对象转换为自定义类型?

时间:2011-08-07 21:07:12

标签: c# json

我有一个班级:

public class LineItemWithDetails
{
        public LineItem LineItem { get; set; }
        public object Details { get; set; }

}

一个web服务方法,它接受从javascript传入的json对象,并反序列化它:

[WebMethod(true)]
public string SaveLineItemDetails(object details, int categoryId, int lineItemId)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    LineItemWithDetails lineItem = serializer.Deserialize<LineItemWithDetails>(details.ToString());

}

参数“details”,如下所示: details.Details [“Name”] =“tessa”; details.Details [“PositionTitle”] =“不管”;

我的问题是,我希望在反序列化之前将LineItemDetails类中的Details属性转换为BudgetPersonnel(参见下文),以便将json对象的值分配给BudgetPersonnel属性。 BudgetPersonnel只是一种类型的例子,还有其他几种。要转换为的是由webservice方法中的categoryId参数确定的。我经历了很多关于通用铸造的教程,但它们都有效。但是,我不明白如何在反序列化之前实现这一点。上面在SaveLineItemDetails中列出的代码反序列化,但Details属性显然只是一个对象,而不是BudgetPersonnel类型。

示例:

public BudgetPersonnel(string name, string positionTitle)
{
    this.Name = name;
    this.PositionTitle = positionTitle;
}

2 个答案:

答案 0 :(得分:0)

首先,我不太确定我会遇到你的问题,所以这是我的答案。

那么基本上你想要的是将一些JSON反序列化为BudgetPersonnel对象? 当我在学校做一项涉及调用服务器的任务时,我遇到了类似的问题,并且服务器返回了一个JSON字符串。我使用了一个序列化每种对象的库,只要JSON字符串包含这样的内容:

"class":"MyClass"

我想这是想要你的? JSON字符串转换为具有指定值的特定对象?我建议使用现有的库来执行此操作(例如Json.NET) 只需传递一个类似于此的JSON字符串:

["Name":"tessa" , "PositionTitle":"superman"]

如果我理解你的问题,我希望它有所帮助。

答案 1 :(得分:0)

您需要编写自己的反序列化类来实现抽象基类JavaScriptConverter。

取自MSDN:

serializer = new JavaScriptSerializer();

// Register the custom converter.
serializer.RegisterConverters(new JavaScriptConverter[] { 
    new System.Web.Script.Serialization.CS.ListItemCollectionConverter() });

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx