【发布时间】:2012-02-08 00:06:32
【问题描述】:
我目前正在尝试构建一个服务来检索 Sitecore 数据项并将其序列化为 JSON,以便我们的 Javascript 代码可以访问 Sitecore 内容数据。
我尝试使用 JavascriptSerializer 和 JSON.Net 直接序列化对象;由于子属性上的各种循环引用,两者都因递归而中断。
我还尝试将项目序列化为 XML(通过 item.GetOuterXml()),然后将 Xml 转换为 JSON。转换工作正常;但它只检索在项目本身上设置的字段,而不是在 _standardvalues 中设置的字段。我尝试在序列化之前调用 item.Fields.ReadAll(),以及调用 item.Fields.EnsureField(Field.id); 的 foreach 循环。但是,两者都没有检索到丢失的字段。但是,调试代码; Fields 数组似乎包含从其基本模板继承的所有字段以及在项目上设置的字段;所以我猜 GetOuterXml 只是忽略了所有未在项目上专门设置的字段。
我越看这个,就越需要一个自定义模型类来封装数据项和必要的字段,用适当的 JSON.Net 序列化属性装饰它,然后从那里序列化.不过,这感觉像是一种肮脏的黑客行为。
所以在我走这条路之前;我想知道这里是否有人有将 Sitecore 内容项序列化为 JSON 以供客户端使用的经验,是否有一种更简单的方法我错过了。非常感谢任何建设性的意见。
干杯, 弗兰克
【问题讨论】:
-
纯 JSON 缺少间接/引用的概念,这实质上意味着不可能仅使用 JSON 序列化包含循环引用的任何内容。但是,您的 JSON 需要多少“纯度”?如果您只需要能够从 JS 反序列化,那么您可以超越 JSON 本身并使用普通对象引用。但是,除非有人已经为这项任务完成了繁琐的工作,否则恐怕您至少必须实现大量的序列化逻辑。
标签: c# json sitecore sitecore6