在MVC c#中序列化时无效的JSON

时间:2014-08-09 15:03:34

标签: c# jquery asp.net-mvc json jquery-ui

我正在使用Jquery UI在我的站点中的文本框上具有自动完成功能,JSON在MVC ViewModel中序列化,然后在视图中使用。 JSON没有在运行时正确生成。 浏览器内控制台返回以下内容

  

未捕获的SyntaxError:意外的令牌&

我还没有使用我自己的数据,所以项目名称仍然与JqueryUI示例相关,使用我自己的JSON数据。

视图(剃刀)

<script>
  $(function () {
      var projects = @Model.TeamsAsJson


      $("#project").autocomplete({
          minLength: 0,
          source: projects,
          focus: function (event, ui) {
              $("#project").val(ui.item.TeamName);
              return false;
          },
          select: function (event, ui) {
              $("#project").val(ui.item.TeamName);
              $("#project-id").val(ui.item.TeamName);
              $("#project-description").html(ui.item.AreaName);
              $("#project-icon").attr("src", "images/" + ui.item.icon);

              return false;
          }
      })
      .autocomplete("instance")._renderItem = function (ul, item) {
          return $("<li>")
            .append("<a>" + item.TeamName + "<br>" + item.AreaName + "</a>")
            .appendTo(ul);
      };
  });
  </script>

<div id="project-label">Select a project (type "j" for a start):</div>
<img id="project-icon" src="images/transparent_1x1.png" class="ui-state-default"    alt="">
<input id="project">
<input type="hidden" id="project-id">
<p id="project-description"></p>

ViewModel

 public String TeamsAsJson{ get{
          JavaScriptSerializer Serializer = new JavaScriptSerializer();
          return Serializer.Serialize(TeamHelpers.GetAllTeams());
      }
          private set { TeamsAsJson = value; }
      }

序列化JSON

[{&quot;TeamID&quot;:1,&quot;TeamName&quot;:&quot;Bilborough Broncos&quot;,&quot;ClubID&quot;:null,&quot;LeagueID&quot;:null,&quot;IsPremium&‌​quot;:false,&quot;PremiumLength&quot;:null,&quot;PremiumStart&quot;:null,&quot;Co‌​untryID&quot;:&quot;GB&quot;,&quot;AreaName&quot;:&quot;Nottingham&quot;,&quot;Cl‌​ub&quot;:null,&quot;League&quot;:null}]

应该是什么

[{"TeamID":1,"TeamName":"Bilborough Broncos","ClubID":null,"LeagueID":null,"IsPremium":false,"PremiumLength":null,"PremiumStart":null,"CountryID":"GB","AreaName":"Nottingham","Club":null,"League":null}]

2 个答案:

答案 0 :(得分:1)

c#变量正在进行html编码。修复是:

var projects = @Html.Raw(Model.TeamsAsJson)

注意:这是从问题中提取的,并代表OP发布在此处。

答案 1 :(得分:0)

回答1:

尝试将JSON.parse用作: -

$("#project").autocomplete({
      minLength: 0,
      source: projects,
      focus: function (event, ui) {
          ui=JSON.parse(ui.replace(/&quot;/g,'"'));
          $("#project").val(ui.item.TeamName);
          return false;
      },
      select: function (event, ui) {
          ui=JSON.parse(ui.replace(/&quot;/g,'"'));
          $("#project").val(ui.item.TeamName);
          $("#project-id").val(ui.item.TeamName);
          $("#project-description").html(ui.item.AreaName);
          $("#project-icon").attr("src", "images/" + ui.item.icon);

          return false;
      }
  })

回答2:

<强>视图模型:

public String TeamsAsJson{ get{
          JavaScriptSerializer Serializer = new JavaScriptSerializer();
          return Serializer.Serialize(JsonConvert.SerializeObject(TeamHelpers.GetAllTeams(), Formatting.None));
      }
          private set { TeamsAsJson = value; }
      }