programing

변환합니다.뷰의 JSON 개체에 대한 순 개체

mailnote 2023. 4. 6. 21:53
반응형

변환합니다.뷰의 JSON 개체에 대한 순 개체

를 변환하고 싶다.뷰의 JSON에 대한 넷오브젝트저의 뷰 모델은 이렇습니다.

public class ViewModel{
    public SearchResult SearchResult { get; set;}    
}    

public class SearchResult {
    public int Id { get; set; }
    public string Text{ get; set; }
}

변환하고 싶다Model.SearchResultJSON 오브젝트에 접속합니다.지금은 이렇게 하고 있어요.

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
//....
var s = @serializer.Serialize(Model.Institution);

결과는 이렇습니다.

var s = { "Name":"a","Id":1};
Create:228Uncaught SyntaxError: Unexpected token &

이를 JSON 개체로 올바르게 변환하려면 어떻게 해야 합니까?

다음 방법을 사용해 보십시오.

@Html.Raw(Json.Encode(Model.Content))

asp.net mvc 2부터 이 도우미를 사용하고 있습니다.

public static MvcHtmlString ToJson(this HtmlHelper html, object obj)
{
  JavaScriptSerializer serializer = new JavaScriptSerializer();
  return MvcHtmlString.Create(serializer.Serialize(obj));
}

public static MvcHtmlString ToJson(this HtmlHelper html, object obj, int recursionDepth)
{
  JavaScriptSerializer serializer = new JavaScriptSerializer();
  serializer.RecursionLimit = recursionDepth;
  return MvcHtmlString.Create(serializer.Serialize(obj));
}

보기:

  <script>
    var s = @(Html.ToJson(Model.Content));
  </script>

시리얼라이저를 JSON으로 교체해야 합니다.Hemant가 참조한 것과 같이 지금 인코딩(..)합니다(JavaScriptSerializer 자체 사용).

문제의 원인은 HTML이 JSON을 인코딩하는 "@"입니다.@Html을 사용할 수 있습니다.Raw(..)를 사용하여 이 동작을 방지합니다.

+: Json을 찾습니다.인터넷 http://json.codeplex.com/

JSON.Net 업데이트

조금 전에 도우미를 JSON.net로 업데이트했습니다(더 나은 업데이트).

일부 사용자는 이전 코드를 계속 읽고, 업투표하고, 사용하고 있는 것 같습니다.아래의 새로운 버전이나 Matthew Nichols가 코멘트에서 알아차린 처럼 NGon을 사용하여 더 나은 방법을 사용했으면 합니다.

코드는 다음과 같습니다.

using System;
using Newtonsoft.Json;

namespace System.Web.Mvc
{
  public static class HtmlHelperExtensions
  {
    private static readonly JsonSerializerSettings settings;

    static HtmlHelperExtensions()
    {
      settings = new JsonSerializerSettings();
      // CamelCase: "MyProperty" will become "myProperty"
      settings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    }

    public static MvcHtmlString ToJson(this HtmlHelper html, object value)
    {
      return MvcHtmlString.Create(JsonConvert.SerializeObject(value, Formatting.None, settings));
    }
  }
}

이것은 원래 답변에 대한 업데이트입니다.또한 @Tyrsius :D의 끈질긴 조조의 결과로서, 저는 그 결과, 그 결과, 제가 에서 생성된 vars에 접근할 수 없었다는 사실을 포기하기를 거부했습니다.<script>.js 라이브러리의 MVC 5 cshtml 페이지에 있는 태그는 별도의 파일에 있습니다.이 페이지에서 작성한 파라미터가 글로벌 스코프를 만들고 플러그인 위젯에서 사용할 수 있는 @section scripts 문 블록 내에 스크립트태그를 배치하면 글로벌 스코프를 만들 수 있습니다.지금까지의 복잡한 앱에서는 사용하고 있지 않지만, 다른 앱의 protoType에서 사용하고 있습니다.답은 다음과 같습니다.@Html 입니다.Raw(...)가 동작하여 즉시 사용할 수 있는 오브젝트를 연재할 수 있었습니다.

이건 앞으로 쓸 건데...나와 함께 있어줘서 고마워 @Tyrsius

   @section scripts
    {
    <script type="text/javascript">
        @using MRTCProtoType.Models.ControllerData.Contracts

        var testVar = @Html.Raw(JsonConvert.SerializeObject(WMMWorkloadTestData.getWorkloadTestData()));
    </script>
        @Scripts.Render("~/bundles/homeworkflow")
    }

다음 코드는 별도의 .js 파일에 있습니다.

$(document).ready(function() {  
    alert(JSON.stringify(testVar));
});

언급URL : https://stackoverflow.com/questions/8502146/convert-net-object-to-json-object-in-the-view

반응형