2017-09-29 8 views
0

atm은 atnet 코어 환경에 있었지만 .net3.5로 돌아가 고군분투하고 있습니다..net3.5의 asmx webservice에서 Json Serialization 설정을 설정하십시오.

은 내가 이전에 근무하지 않은 ASMX의 웹 서비스를 가지고, 그것은

내 웹 방법

<system.web.extensions> 
<scripting> 
    <webServices> 
    <jsonSerialization maxJsonLength="2147483647" /> 
    </webServices> 
</scripting> 

그렇게

[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)] 
    [WebMethod] 
    public SyncDownResponse SyncDown(string syncDownReq) 
    { 
     return Wrap<SyncDownSummaryRequest, SyncDownSummaryResponse>(_service.SyncDownSummary, syncDownSummaryRequestObject); 
    } 
처럼 Web.config의 설정 jsonserialisation를 사용

이것은 웹 서비스 설정에서 json에 의해 직렬화되는 SyncDownResponse 객체를 반환합니다. 이 모든 것이 잘 작동합니다.

이제 데이터를 직렬화 할 때 null 값을 무시하는 것이 좋습니다. 나는이

public bool ShouldSerializeCompanyParameters() 
    { 
     return CompanyParameters.HasValue; 
    } 

을 시도 그리고 JSON 속성을 추가는

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 

속성 그러나 코드가 충돌되지 않습니다. JsonConvert.SerializeObject를 호출하면 serialize 메서드를 호출합니다.

어쨌든 null 값을 무시하도록 직렬화 설정을 설정해야하지만 고생하고 있습니다. Global.asax 파일에서 GlobalConfiguration을 설정할 기사를 찾았지만 GlobalConfiguration에 대한 누락 된 참조가 나타납니다. 모든 System.Web 참조를 추가했지만 아무것도 추가하지 않았습니다. 나는 그것이 .net3.5에 존재하지 않을 수도 있다고 생각한다. 어떤 도움이 좋을 것, 그래서 여기,

답변

0

그래서 시행 착오를 통해, 나는 그것이 작동있어

덕분에 내가의 Web.config 또는 Global.asax에 뭔가를 설정할 수 있습니다 생각하지만 순간에 붙어 다른 사람이 같은 문제가있는 경우입니다. 이 더 나은 솔루션이 될하지만이

변경의 WebMethod는 응답에 기록, 무시 널 (null) 속성을 무효

[WebMethod] 
public void SyncDown(string syncDownReq) 
{ 
    objectToSync = Wrap<SyncDownSummaryRequest, SyncDownSummaryResponse>(_service.SyncDownSummary, syncDownSummaryRequestObject); 
    SerialiseObjectAndSync(objectToSync); 
} 

SerialiseObjectAndSync 호출 JSON 시리얼 라이저를 반환하는 ... 나를 위해 작동 할 수 있습니다. 내 json의 끝에 추가 된 {d : null} 문자열을 없애기 위해 flush를 호출해야했습니다.

public void SerialiseObjectAndSync<T>(T objectToSync) where T : class 
    { 
     // Need to serialise object and inform serialiser to ignore nulls 
     var serialisedObject = JsonConvert.SerializeObject(objectToSync, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); 

     // Now create the response 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.ContentType = "application/json"; 
     HttpContext.Current.Response.AddHeader("content-length", serialisedObject.Length.ToString()); 
     HttpContext.Current.Response.Flush(); // Flushing gets rid of the {d: null} that gets deserialised with object otherwise 
     HttpContext.Current.Response.Write(serialisedObject); 
     HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    }