2016-05-24 1 views
1

に所望のJSONプロパティをマッピングする方法:クラスにカスタムJSON

"MyRootAttr": { 
    "value": "My Value" 
} 

プロパティ定義を:

public string MyRootAttr { get; set; } 

だから、質問は、単一の文字列プロパティで、新しいクラスを定義することなく、あります私が望むJSONをどうすれば達成できますか? Json.netで

var myObj = new { MyRootAttr = new { value = "My Value" } }; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
string json = js.Serialize(myObj); //{"MyRootAttr":{"value":"My Value"}} 

::私は私のコメントで述べたように

+1

たぶん匿名型は役立つだろう:https://msdn.microsoft.com/en-us/library/bb397696.aspx –

+0

は、あなたがこれまでに試したものを投稿してください。 – NickHeidke

答えて

2

を、あなたのクラスの構造を変更したくない場合は、カスタムJsonConverterを使用して、必要な結果を得ることができます。

class WrappedStringConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return (objectType == typeof(string)); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     string s = (string)value; 
     JObject jo = new JObject(new JProperty("value", s)); 
     jo.WriteTo(writer); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     JObject jo = JObject.Load(reader); 
     return (string)jo["value"]; 
    } 
} 

Toそれを使用し、このようなあなたの文字列プロパティに[JsonConverter]属性を追加します。

class Foo 
{ 
    [JsonConverter(typeof(WrappedStringConverter))] 
    public string MyRootAttr { get; set; } 
} 

ここでは往復のデモ:単純な文字列の書式設定または手動でJSON文字列を構築https://dotnetfiddle.net/y1y5vb

2

anonymous typeはこの達成を助けることができる

string json = JsonConvert.SerializeObject(myObj); //{"MyRootAttr":{"value":"My Value"}} 
1

使用。

var str = String.Format("\"MyRootAttr\": {{ \"value\": \"{{0}}\" }}", MyRootAttr); 
+0

var str = String.Format( "\" MyRootAttr \ ":{{\"値\ ":\" {{0}} \ "}}"、MyRootAttr); – Dexion

関連する問題