有没有人幸运使用.NET Web服务访问Sitecore项目?我的服务器上有许多仍在Coldfusion中的Web应用程序。我希望能够调用Web服务来下拉项目,但是当我尝试这样做时,我得到一个异常“Sitecore.Data.Items.Item无法序列化,因为它没有无参数构造函数。” / p>
答案 0 :(得分:7)
查看Sitecore标准Web服务,您可以在解决方案的/ sitecore / shell / WebService文件夹下找到它。它提供了一些Sitecore项目和字段的基本操作,但它通常足以提取或保存数据。
希望这有帮助。
答案 1 :(得分:2)
我也在SDN forum上回答了这个问题。您可以创建自己的包装器对象,该对象填充Sitecore项并设置其成员。困难的部分是创建您的成员并从真正的Sitecore项目分配它们。如果你想要一切,那么我认为这将是困难的。如果你只是想要一些东西那么它可行。 E.g。
[Serializable]
public class SitecoreItem {
public string ID;
// more members
SitecoreItem(Sitecore.Data.Items.Item scItem) {
this.ID = scItem.ID;
// assign more members from the true Sitecore item
}
}
然后在您的WS方法中使用您的实际Sitecore项填充一个新实例并将其返回:
return new SitecoreItem(actualSCItem);
答案 2 :(得分:1)
如果序列化程序和反序列化程序都可以访问Sitecore数据库,那么您可以非常轻松地创建一个只包含ID,数据库名称,版本和语言的包装器。然后在另一端进行反序列化时,您可以使用该信息从数据库中重新获取相同的Sitecore项。
如果反序列化器根本没有访问数据库的权限,那么它实际上取决于您使用数据的需求。我通常遍历所有字段(请记住首先使用item.Fields.ReadAll()
),并将它们存储在字典中以便于访问。对于序列化,我将其转换为List<T>
键值对并忽略Dictionary
成员(因为它无法序列化),然后在反序列化时重新填充它。我也在课堂上保留了其他一些属性,如ID,语言,版本,模板,路径等。
或者,如果你创建一个完整的模型类库,以便每个模板都映射到一个类(有些人),你可以(可能)直接序列化它们,因为它们(可能)不再绑定到Sitecore项目