我的网络服务获取一个项目,应该存储它和它的字段:
[WebMethod]
public void StoreItem(Item item)
{
item.Store();
}
有4种类型的字段,但是当客户端传递Item对象时 - 字段将无法正确传递,因为它是接口而不是实现。 一个可能的解决方案 - 根本不能帮助我,而是使用以下网络服务:
[WebMethod]
public void StoreItem(Item item, frstTypeField[] fields12, scndTypeField[] fields,
thrdTypeField[] fields3, frthTypeField[] fields4)
{
//append fields to item and then store
}
我不喜欢这个解决方案,因为我需要在添加新字段类型时更改web服务。此外 - 项目是订单的一部分,因此存在另一个存储订单的Web服务。那么如何为订单中的每个项目传递字段?
有没有解决方案?
答案 0 :(得分:0)
您需要将所有相关信息设为公共属性,并确保所有这些信息都是xml可序列化的(或通过IXmlSerializable
接口提供自定义序列化)。
答案 1 :(得分:0)
我的工作是将JSON对象发送到我的WebMethod,其__type
属性等于限定类(例如{item:{'__type':'MyNamespace.Item'}}
。
但如果您的Item
对象有点复杂,那可能会有点乏味。
我开始做的是发布一个不带参数的WebMethod
,只返回一个我想要传递给真实WebMethod
的新实例化对象。
[WebMethod]
public static Item GetItem () {
return new Item {
// set properties, whatever
};
}
从你的jQuery中调用它,并使用类似JSON2的东西来检查返回的对象。
$(function() {
$.ajax({
url : 'default.aspx/GetItem',
data : '{}',
// blah
success : function (m) {
alert (JSON.stringify(m.d));
}
});
});
...然后只使用生成的JSON字符串作为模板。根据需要进行修改。
答案 2 :(得分:0)
我的回答: 我创建了一个名为“TransitionItem”的转换对象,它包含4个属性,其中每个属性都是一个类型为字段类型之一的数组。 在这个转换对象中,我创建了一个名为ToItem的方法,它将TransitionItem“转换”为具有所有接口和东西的“普通”项。 所以我的网络服务现在看起来像:
[WebMethod]
public void StoreItem(TransitionItem tItem)
{
IItem item=tItem.ToItem();
item.Store();
}
这就是我解决它的方法。