この質問と同様に、BsonDocument を含むいくつかの異なるプロパティ タイプを持つクラスがあります。
public class Report
{
[BsonId, JsonIgnore]
public ObjectId _id { get; set; }
public string name { get; set; }
[JsonIgnore]
public BsonDocument layout { get; set; }
[BsonIgnore, JsonProperty(PropertyName = "layout")]
public string layout2Json
{
get { return layout.ToJson(); }
}
}
そこに BsonDocument がある理由は、レイアウト プロパティが構造化されておらず、厳密に型指定されたサブクラスを持つことができないためです。ApiController がこのクラスを返すと、次のようになります。
{
name: "...",
layout: "{type: "...", sth: "..."}"
}
しかし、私が必要としているのは、文字列ではなく、オブジェクトとしてのレイアウト プロパティです。
JSON.NET で json-string (既に有効な json) を文字列ではなくオブジェクトとしてプラグインする方法はありますか?
以下は機能しますが、非常に無駄に思えます。
[BsonIgnore, JsonProperty(PropertyName = "layout")]
public JObject layout2Json
{
get { return JObject.Parse(layout.ToJson()); }
}