c#-将Sitecore.Data.Items.Item序列化为JSON
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-将Sitecore.Data.Items.Item序列化为JSON,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2158字,纯文字阅读大概需要4分钟。
内容图文
![c#-将Sitecore.Data.Items.Item序列化为JSON](/upload/InfoBanner/zyjiaocheng/673/54c084cd1b574fef84978c525259dcdc.jpg)
我目前正在尝试构建服务来检索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序列化属性对其进行装饰,然后从那里进行序列化.但是,这感觉像是一个肮脏的hack.
所以在我走这条路之前我想知道这里是否有人有过将Sitecore内容项序列化为JSON以供客户端使用的经验,而我缺少一种更简单的方法了吗?非常感谢任何建设性的投入.
干杯,
坦率
解决方法:
我建议您采用创建自定义模型类的方法,以仅封装需要传递给客户端的项目数据.然后将该类序列化为JSON.这样可以减少您通过网络发送的数据量,并允许您选择要发送的数据(出于安全原因).
CustomItem模式和部分类非常适合这种方法.在下面的代码示例中,.base类是您的基本自定义项目包装器.您可以使用此类以强类型的方式访问字段和字段值. .instance类可用于JSON序列化.
通过拆分要序列化的属性,您可以精确控制发送回请求客户端的数据,而不必担心循环引用.如果您需要对字段定义进行任何更改,则只需更改.base类,而对JSON序列化的影响最小.
希望这可以帮助!
MyCustomItem.base.cs
public partial class MyCustomItem : Sitecore.Data.Items.CustomItem
{
public const string TitleFieldName = "Title";
public MyCustomItem(Item innerItem) : base(innerItem)
{
}
public static implicit operator MyCustomItem(Item innerItem)
{
return innerItem != null ? new MyCustomItem(innerItem) : null;
}
public static implicit operator Item(MyCustomItem customItem)
{
return customItem != null ? customItem.InnerItem : null;
}
public string Title
{
get { return InnerItem[TitleFieldName]); }
}
}
MyCustomItem.instance.cs
[JsonObject(MemberSerialization.OptIn)]
public partial class MyCustomItem
{
[JsonProperty("Title")]
public string JsonTitle
{
get { return Title; }
}
}
内容总结
以上是互联网集市为您收集整理的c#-将Sitecore.Data.Items.Item序列化为JSON全部内容,希望文章能够帮你解决c#-将Sitecore.Data.Items.Item序列化为JSON所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。