2017-09-29 16 views
0

非常にスタックしています.netコアの世界ですが、.net3.5に戻って苦労しています。asmx webserviceのJson Serialization設定を.net3.5に設定しました

は私が前に働いていないASMXのWebサービスを持って、それが

マイウェブメソッド

<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を使用しています

これは、Webサービスの設定でjsonによってシリアライズされたSyncDownResponseオブジェクトを返します。これはすべて正常に動作します。

私がしたいのは、データをシリアル化するときにnull値を無視することです。私はこの

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

そして

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 

JSONプロパティの属性を追加することを試してみましたが、コードがヒットされていません。私がJsonConvert.SerializeObjectを呼び出すと、必然的にshould serialiseメソッドが呼び出されます。

とにかく、ヌル値を無視するようにシリアル化設定を設定する方法が必要ですが、私は苦労しています。私はGlobal.asaxファイルでGlobalConfigurationを設定する記事を見つけましたが、GlobalConfigurationには参照がありません。私はSystem.Webの参照をすべて追加しましたが、何も追加しませんでした。私はそれがネット3.5に存在しないかもしれないと思う。すべてのヘルプは素晴らしいことだ、私は

おかげ

答えて

0

だから試行錯誤を通じて、私はそれはとてもここで、働いてしまった私は、web.configファイルまたはGlobal.asaxの中で何かを設定することができると思いますが、現時点で立ち往生他の誰かが同じ問題を抱えているかどうかです。そこよりよい解決策になるが、これは私のために働くことがあります...

変更SerialiseObjectAndSyncは、応答に書き込み、ヌルの特性を無視して、JSONシリアライザを呼び出し

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

voidを返すようにWebメソッド。私は、私の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(); 
    } 
関連する問題