私は取得する必要があります:
public class Package
{
public Package()
{
name = "";
type = new List<Dictionary<string, string>>();
}
public string name { get; set; }
public List<Dictionary<string, string>> type { get; set; }
}
に:
{
"name":"package_name",
"type":
{
"http://random.url.as.key":"random/value"
}
}
で:
Package package = new Package();
package.name = "package_name";
package.type.Add(new Dictionary<string, string>() { { "http://random.url.as.key", "random/value" } });
私は得る:
{
"name":"package_name",
"type":
[
[
{
"Key":"http:\/\/random.url.as.key",
"Value":"random\/value"
}
]
]
}
一方、
var package = new
{
name = "package_name",
type = new
{
http_random_url_as_key = "random/value"
}
};
私は得る:
{
"name":"package_name",
"type":
{
"http_random_url_as_key":"random/value"
}
}
わかりにくいhttp://random.url.as.keyが必要だ。 JavaScriptSerializer、DataContractJsonSerializer、and Json.NET用のカスタムコンバーターを使用してみましたが、成功/欠点は限られていました。
簡単なJSONオブジェクトをネットワーク経由で取得するには、見落とすより良い方法/何かが必要です!
まず、最初の例では、基本的にKeyValuePair<string,string>
オブジェクトのコレクションのリストがあります。
したがって、表示されるJSONに変換される理由は次のとおりです。
{
"name":"package_name",
"type":
[ // List<Dictionary<string,string>>
[ // Dictionary<string,string>, a list of KeyValuePair<string,string> objects
{ // KeyValuePair<string,string> object
"Key":"http:\/\/random.url.as.key",
"Value":"random\/value"
}
]
]
}
2番目の例までは、動的オブジェクトを含む動的オブジェクトを作成しており、オブジェクトの各フィールドがキー値を提供しています。
ですから、List<>
の周りに外側のDictionary<string,string>
を捨てて、シリアル化を行うときにJSON.NetライブラリのNewtonsoft.Json.Converters.KeyValuePairConverter
オブジェクトを利用することをお勧めします。
string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );
お役に立てば幸いです。
[〜#〜] edit [〜#〜]
さて、より具体的な例を挙げるべきだと思いました
public class Package
{
public Package()
{
name = "";
type = new Dictionary<string, string>();
}
public string name { get; set; }
public Dictionary<string, string> type { get; set; }
}
Package package = new Package();
package.name = "package_name";
package.type.Add("http://random.url.as.key", "random/value");
string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );
これにより出力が得られます
{
"name":"package_name",
"type":
{
"http://random.url.as.key":"random/value"
}
}