2

次のような DTO クラスがあります。

public class DTO
    {
        public int Number { get; set; }
        public string Title { get; set; }

        public Dictionary<string, string> CustomFields { get; set; }
    }

CustomFieldsがDTOフィールドとして展開されているJSONにServiceStackでDTOをシリアライズ/デシリアライズしたいです。例えば

new DTO 
{
    Number = 42
    Title = "SuperPuper"
    CustomFields = new Dictionary<string, string> {{"Description", "HelloWorld"}, {"Color", "Red"}}
}

にシリアライズ

{
    "Number":42,
    "Title":"SuperPuper",
    "Description":"HelloWorld",
    "Color":"Red"
}

どうすればこれを達成できますか?

  • すべてのディクショナリ フィールドは、シリアル化中に JSON オブジェクト フィールドとして表す必要があります。
  • DTO のフィールドではない受信 JSON オブジェクトのすべてのフィールドは、逆シリアル化中にディクショナリに配置する必要があります。
4

1 に答える 1

0

Newtonsoft ライブラリを使用する場合は、次のことができます。

   DTO Test = new DTO
   {
       Number = 42,
       Title = "SuperPuper",
       CustomFields = new Dictionary<string, string> { { "Description", "HelloWorld" }, { "Color", "Red" } }
   };

    String Json = Newtonsoft.Json.JsonConvert.SerializeObject(Test);

    Json = Json.Replace("\"CustomFields\":{", "");
    Json = Json.Replace("}}", "}");

結果の json 文字列は次のようになります。

{"Number":42,"Title":"SuperPuper","Description":"HelloWorld","Color":"Red"}

[編集]

私はあなたのすべての仕事をするつもりはありません...これはあなたが始めるはずです:

// to reconstruct the object
Newtonsoft.Json.Linq.JObject MyObject = Newtonsoft.Json.JsonConvert.DeserializeObject(Json) as Newtonsoft.Json.Linq.JObject;

// Create a new object here.

foreach( var Token in MyObject)
{         
    // sample  
    if (Token.Key == "Number")
    {
        // populate the fields of the new object with Token.Value
    }      
}
于 2013-03-27T13:54:10.207 に答える