2016-12-03 2 views
0

AWS SNSモジュールを介して送信するメッセージをシリアル化する必要があります。C# - SNSのJSONシリアル化

public async Task<string> jsonConvert(string message) 
{ 
    datamessage datamessage = new datamessage { message = message }; 
    gcmMessage lGcm = new gcmMessage { data = datamessage }; 
    MessageDto messageDto = new MessageDto { GCM = JsonConvert.SerializeObject(lGcm) }; 
    var msg = JsonConvert.SerializeObject(messageDto); 
    return msg; 
} 

私は同じのために、このコードを使用していますが、戻り値は

{"GCM":"{\"data\":{\"message\":\"TestMsg\"}}"} 

あるしかし、私は任意の助けをいただければ幸いです

{"default": "TestMsg", "GCM": "{ \"data\": { \"message\": \"TestMsg\" } }"} 

としてそれをしたいです。

答えて

0

あなたはTOT作成したいJSONのための構造は、次のようになります。

クラス:

public class Data 
{ 
    [JsonProperty("message")] 
    public string Message { get; set; } 
} 

public class GCM 
{ 
    [JsonProperty("data")] 
    public Data Data { get; set; } 
} 

public class RootObject 
{ 
    [JsonProperty("default")] 
    public string Default { get; set; } 

    [JsonProperty("GCM")] 
    public GCM GCM { get; set; } 
} 

をメッセージを作成します:

RootObject rootObject = new RootObject 
{ 
    Default = "TestMsg", 
    GCM = new GCM { Data = new Data { Message = "TestMsg" } } 
}; 

のSerialize:

あなたの方法で
var serialized = JsonConvert.SerializeObject(rootObject); 

結果

"{\"default\":\"TestMsg\",\"GCM\":{\"data\":{\"message\":\"TestMsg\"}}}" 

それは次のようになります。

public async Task<string> jsonConvert(string message) 
{ 
    RootObject rootObject = new RootObject 
    { 
     Default = message, 
     GCM = new GCM { Data = new Data { Message = message } } 
    }; 

    var msg = await Task.Factory.StartNew(() => JsonConvert.SerializeObject(rootObject)); 
    return msg; 
} 
+1

良いあなたが代わりのパブリックプロパティに名前を付けるの 'JsonProperty'属性を使用する方法を示したこと小文字で:) –

+0

なぜシリアル化のための新しいスレッドを開始しますか?スレッドの作成/同期はより高価ではないでしょうか? –

+0

@ChristianGollhardt 'Task.Factory.StartNew'は必ずしも新しいスレッドを作成するとは限りません。 – Jim