从类的属性中获取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>

从类的属性中获取JSON值的更好方法

为什么不序列化您正在获得的列表,然后访问其中的每个字段?

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...