从类的属性获取这些JSON值的更好方法是什么?

时间:2015-05-19 03:19:31

标签: c# asp.net json

我需要从名为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 Arrays传递给javascript,但我觉得我正在创建许多字符串,并且在List上做了太多Select Statements。有没有办法简化性能和更短的代码?也许一线或接近它?我需要维护索引关联,即0到(_HomeHeaderList.Count - 1),所以这是我能想到的唯一方法。但这对我来说似乎很草率。

我需要维护每个索引的原因是因为,在Javascript中我使用每个索引的这些值将它们写为文本。

由于

需要将Json Arrays中的值输入到此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>

1 个答案:

答案 0 :(得分:2)

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

import java.awt.


public Yourclass{

JPanel Container;
GridBagLayout yourlayout;
GridBagConstraints gbc;

//Initialize them in the constructor.. Ex: Container = new JPanel();
}


private void addobjects(Component object, int gridx, int gridy, int width, int heigth){

gbc.gridx = gridx;
gbc.gridy = gridy;

gbc.gridwith = width;
gbc.gridheight = height;

yourlayout.setConstraints(object, gbc);
Container.add(object);

}

然后在.ascx文件中,您应该能够:

addobjects(YourJLabel, 0, 0, 1, 1);
addobjects(YourTextField, 1, 0, 1, 1);

显然,您需要在ascx文件中添加一个循环来依次获取每个项目,但这种方法可以将所有数据保存在一起。

编辑:

要更新您的javascript,您应该只需使用_HomeHeaderJson上的slideIndex,然后获取每个字段。

例如

JavaScriptSerializer jss = new JavaScriptSerializer();
_HomeHeaderJson = jss.Serialize(_HomeHeaderList);