从类的属性中获取JSON值的更好方法
本文关键字:更好 JSON 方法 属性 获取 | 更新日期: 2023-09-27 17:49:35
我需要从一个名为Header
的类中获取特定的变量。我有所有这些类的List<Header>
,目前是这样做的:
protected string _HrefsJson = string.Empty;
protected string _OnClicksJson = string.Empty;
protected string _TargetsJson = string.Empty;
protected string _TitlesJson = string.Empty;
protected string _CaptionsJson = string.Empty;
List<Header> _HomeHeaderList = _Home.HeaderList.FindAll(u => !string.IsNullOrEmpty(u.MobileImage));
IEnumerable<string> _Titles = _HomeHeaderList.Select(u => u.Title).ToList();
IEnumerable<string> _Captions = _HomeHeaderList.Select(u => u.Caption).ToList();
IEnumerable<string> _Targets = _HomeHeaderList.Select(u => u.LinkTarget).ToList();
IEnumerable<string> _OnClicks = _HomeHeaderList.Select(u => u.LinkOnClick).ToList();
IEnumerable<string> _Hrefs = _HomeHeaderList.Select(u => u.Link).ToList();
JavaScriptSerializer jss = new JavaScriptSerializer();
_TitlesJson = jss.Serialize(_Titles);
_CaptionsJson = jss.Serialize(_Captions);
_HrefsJson = jss.Serialize(_Hrefs);
_TargetsJson = jss.Serialize(_Targets);
_OnClicksJson = jss.Serialize(_OnClicks);
在我的。ascx文件中,我得到这些字符串,像这样,在<script>
标签:
var titles = <%=_TitlesJson %>,
captions = <%= _CaptionsJson %>,
hrefs = <%= _HrefsJson %>,
targets = <%= _TargetsJson %>,
onclicks = <%= _OnClicksJson %>;
事情是,我需要序列化这些值作为JSON数组传递到javascript中,但我觉得我正在创建许多字符串,并且在这里的列表上做了太多的Select Statements
。是否有一种方法可以简化性能和更短的代码?也许是一句俏皮话或类似的话?我需要维护索引关联,从0到(_HomeHeaderList.Count - 1)
,所以这是我能想到的唯一方法。但对我来说,这似乎很草率。
我需要维护这些索引的原因是,在Javascript中,我使用每个索引的这些值来将它们写成文本。
感谢Json数组中的值需要输入到这个Html结构中:
<div class="mobile-text-wrapper" data-target="#mobileCarousel" role="overlay">
<div class="pnova-bold mobile-title"></div>
<div class="tisa-italic mobile-caption"></div>
</div>
<a class="mobile-overlay-link"></a>
我使用的jQuery是这样的:
<script>
var titles = <%=_TitlesJson %>,
captions = <%= _CaptionsJson %>,
hrefs = <%= _HrefsJson %>,
targets = <%= _TargetsJson %>,
onclicks = <%= _OnClicksJson %>,
slideIndex = 0;
jQuery(document).ready(function($) {
$(".mobile-title").text(titles[slideIndex]);
$(".mobile-caption").text(captions[slideIndex]);
$(".mobile-overlay-link").attr("href", hrefs[slideIndex]);
if (targets[slideIndex] != "")
$(".mobile-overlay-link").attr("target", targets[slideIndex]);
if (onclicks[slideIndex] != "")
$(".mobile-overlay-link").attr("onclick", onclicks[slideIndex]);
// On Slide Before
$('#mobileCarousel').bind('slide.bs.carousel', function (e) {
$(".mobile-text-wrapper").fadeOut("fast");
});
// On Slide After
$('#mobileCarousel').on('slid.bs.carousel', function (e) {
slideIndex = $('#mobileCarousel .active').index('#mobileCarousel .item');
$(".mobile-title").text(titles[slideIndex]);
$(".mobile-caption").text(captions[slideIndex]);
$(".mobile-overlay-link").attr("href", hrefs[slideIndex]);
if (targets[slideIndex] != "")
$(".mobile-overlay-link").attr("target", targets[slideIndex]);
if (onclicks[slideIndex] != "")
$(".mobile-overlay-link").attr("onclick", onclicks[slideIndex]);
$(".mobile-text-wrapper").fadeIn("slow");
});
});
</script>
为什么不序列化您正在获得的列表,然后访问其中的每个字段?
JavaScriptSerializer jss = new JavaScriptSerializer();
_HomeHeaderJson = jss.Serialize(_HomeHeaderList);
然后在.ascx文件中,您应该可以这样做:
var title = <%=_HomeHeaderJson[0].Title %>
显然,您需要在ascx文件中添加一个循环来依次获取每一项,但是这种方法可以将所有数据保存在一起。
编辑:要更新你的javascript,你应该能够在_HomeHeaderJson上使用slideIndex,然后获取每个字段。
。
var data = <%=_HomeHeaderJson %>
$(".mobile-title").text(data[slideIndex].Title);
$(".mobile-caption").text(data[slideIndex].Caption);
etc etc...