我有一个班级:
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;
}
答案 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() });