(また、あなたのプロジェクトに適切な参照を追加していることを確認してください)あなたのサービス実装クラスの先頭に次のusing
を追加します。
using Newtonsoft.Json;
using System.Dynamic;
using System.IO;
using System.Text;
あなたはダイナミックな結果を出力し、この簡単な方法を試してください:
public string GetData()
{
dynamic d = new ExpandoObject();
dynamic bartSimpson = new ExpandoObject();
dynamic lisaSimpson = new ExpandoObject();
bartSimpson.url = "foo";
bartSimpson.desc = "bar";
lisaSimpson.url = "foo";
lisaSimpson.desc = "bar";
d.userTypes = new ExpandoObject();
d.userTypes.BartSimpson = bartSimpson;
d.userTypes.LisaSimpson = lisaSimpson;
var s = JsonSerializer.Create();
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
s.Serialize(sw, d);
}
return sb.ToString();
}
(あなただけcomaSeparatedNames
値でバートとリサに合格する必要があります)もう一歩進んために、あなたができる:
public string GetData(string comaSeparatedNames)
{
string[] names = comaSeparatedNames.Split(',');
dynamic d = new ExpandoObject();
dynamic dNames = new ExpandoObject();
foreach (var name in names)
{
dynamic properties = new ExpandoObject();
properties.url = "foo";
properties.desc = "bar";
((IDictionary<string, object>)dNames).Add(name, properties);
}
((IDictionary<string, object>)d).Add("userTypes", dNames);
var s = JsonSerializer.Create();
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
s.Serialize(sw, d);
}
// deserializing sample
//dynamic dummy = new ExpandoObject();
//var instance = s.Deserialize(new StringReader(sb.ToString()),
// dummy.GetType());
//var foo = instance.userTypes.BartSimpson.url;
return sb.ToString();
}
注:デシリアライズのための行(コメント付き)も提供しています。
編集:私は、あなたが 'Newtonsoft.Json'を直列化に使用していると仮定します。 – maxp
このような包括的なコード例をありがとう。私は現在それを介して作業しています。残念ながら、戻り値の型が 'string'として定義されたので、私の応答はすべての値をエスケープしているようです。 – maxp
どういう意味ですか? –