我是C#编程的初学者。请帮我把这个代码示例用PHP重写为C#:
<?php
$final = array('header' => array(), 'data' => array());
$final['header'] = array('title' => 'Test', 'num' => 5, 'limit' => 5);
foreach ($results as $name => $data)
{
$final['data'][] = array('primary' =>'Primary','secondary' => 'Secondary','image' => 'test.png','onclick' => 'alert('You clicked on the Primary');');
}
header('Content-type: application/json');
echo json_encode(array($final));
?>
我试图做这样的事情,但没有成功。
Dictionary<string, string> final = new Dictionary<string, string>();
stringArray.Add("header", "data");
答案 0 :(得分:4)
“最简单”的方法是Dictionary<Object, Object>
。由于PHP对数据类型如此松散,Object
会为您提供更大的灵活性。那么.NET将根据需要box值。类似的东西:
/* $final */
IDictionary<Object, Object> final = new Dictionary<Object, Object>();
/* $final["header"] */
// by keeping this separated then joining it to final, you avoid having
// to cast it every time you need to reference it since it's being stored
// as an Object
IDictionary<Object, Object> header = new Dictionary<Object, Object> {
{ "title", "Test" },
{ "num", 5 },
{ "limit", 5 }
};
// above short-hand declaration is the same as doing:
// header.Add("title", "Test");
// header.Add("num", 5);
// header.Add("limit", 5);
final.Add("header", header);
/* $final["data"] */
IList<Object> data = new List<Object>();
// not sure where `results` comes from, but I'll assume it's another type of
// IDictionary<T1,T2>
foreach (KeyValuePair<Object, Object> kvp in results)
{
data.Add(new Dictionary<Object, Object> {
{ "primary", "Primary" },
{ "secondary", "Secondary" },
{ "image", "test.png" },
{ "onclick", "alert('You clicked on the Primary');" }
});
}
final.Add("data", data);
请记住,这肯定是不最优化的,但确实最接近您正在使用的内容。
从那里,您可以使用库(如Newtsonsoft Json)并序列化信息。
JsonConvert.SerializeObject(final);
经过测试和工作:
我将$results
/ results
添加为两个值相等(foo-&gt; Foo,bar-&gt; Bar,baz-&gt; Baz),然后将两者序列化为JSON并生成相同的值:
[{ “报头”:{ “标题”: “测试”, “NUM”:5, “限制”:5}, “数据”:[{ “主”: “主”, “副”:”辅助“,”图像“:”test.png“,”onclick“:”alert('你点击了主要');“},{”primary“:”Primary“,”secondary“:”Secondary“,” image“:”test.png“,”onclick“:”alert('你点击了主要');“},{”primary“:”Primary“,”secondary“:”Secondary“,”image“:” test.png“,”onclick“:”alert('你点击了主要');“}]}]
答案 1 :(得分:0)
与你提出的问题略有不同,但我可能会做类似的事情:
class ReturnArg
{
public Dictionary<Object, Object> header = new Dictionary<Object, Object>();
public Dictionary<Object, Object> data = new Dictionary<Object, Object>();
}
然后(在MVC控制器中?):
public JsonResult GetRevisions(int id)
{
ReturnArg r = new ReturnArg();
r.header.Add("title", "Test");
r.header.Add("num", 5);
r.header.Add("limit", 5);
r.data.Add("primary", "Primary");
...
return Json(r);
}
也可能:
var r = new
{
header = new { title = "Test", num = 5, limit = 5 },
data = new { primary = "Primary", secondary = "Secondary" }
};
希望有所帮助。