所需的JSON:
"MyRootAttr": {
"value": "My Value"
}
班级中的属性定义:
public string MyRootAttr { get; set; }
所以,问题是,如果没有使用单个字符串属性定义新类,我如何实现我想要的JSON?
答案 0 :(得分:2)
正如我在评论中提到的,anonymous type可以帮助实现这一目标:
string json = JsonConvert.SerializeObject(myObj); //{"MyRootAttr":{"value":"My Value"}}
使用Json.net:
if
答案 1 :(得分: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"];
}
}
要使用它,请在字符串属性中添加[JsonConverter]
属性,如下所示:
class Foo
{
[JsonConverter(typeof(WrappedStringConverter))]
public string MyRootAttr { get; set; }
}
此处的往返演示:https://dotnetfiddle.net/y1y5vb
答案 2 :(得分:1)
使用简单的字符串格式或手动构建json字符串。
var str = String.Format("\"MyRootAttr\": {{ \"value\": \"{{0}}\" }}", MyRootAttr);