是否可以使用 c# class 创建此 JSON 格式?
Is it possible to create this JSON format using a c# class?
我正在努力处理 redactor 中的多张图片上传。具体来说,在上传并保存图像后创建 return JSON。
我已经设法使用 StringBuilder
来做到这一点,但如果可能的话,我想使用 return Json(redactorResult, JsonRequestBehavior.AllowGet);
以正确键入的 class 来做到这一点
所需格式
从redactor demo page,我可以看到我需要的格式是:
{
"file-0": {
"url":"/tmp/images/b047d39707366f0b3db9985f97a56267.jpg",
" id":"70e8f28f4ce4a338e12693e478185961"
},
"file-1":{
"url":"/tmp/images/b047d39707366f0b3db9985f97a56267.jpg",
"id":"456d9b652c72a262307e0108f91528a7"
}
}
C#Class
但是要从 c# class 创建这个 JSON 我想我需要这样的东西:
public class RedactorFileResult
{
public string url {get;set;}
public string id {get;set;}
}
public class RedactorResult
{
public RedactorFileResult file-1 {get;set;}
public RedactorFileResult file-2 {get;set;}
// .. another property for each file...
}
...这在最坏的情况下似乎是不可能的(永远不知道将上传多少图像),充其量也有点不切实际。
问题
我的做法是否正确?有没有我不知道的方法可以做到这一点?
还是我最好在这种情况下坚持使用字符串生成器?
为单个项目定义 class:
public class File
{
public string Url { get; set; }
public string Id { get; set; }
}
然后像这样创建文件:
var files = new List<File>();
files.Add(new File{Url = "tmp/abc.jpg", Id = "42"});
files.Add(new File {Url = "tmp/cba.jpg", Id = "24"});
现在您可以使用 linq 查询获得所需的 json 输出:
var json = JsonConvert.SerializeObject(files.Select((f, i) => new {f, i})
.ToDictionary(key => $"file-{key.i}", value => value.f));
在我的例子中结果是:
{
"file-0":{
"Url":"tmp/abc.jpg",
"Id":"42"
},
"file-1":{
"Url":"tmp/cba.jpg",
"Id":"24"
}
}
定义项目:
class Item
{
public string Url { get; set; }
public string Id { get; set; }
}
那么你应该使用字典而不是 RedactorResult class,像这样:
var redactorResult = new Dictionary<string, Item>();
redactorResult["file-1"] = new Item(){ Url = "...", Id = "..." };
redactorResult["file-2"] = new Item(){ Url = "...", Id = "..." };
如果您更喜欢 RedactorResult class,您可以扩展字典:
class RedactorResult : Dictionary<string, Item>
{
private int count = 0;
public void Add(Item item)
{
this[$"file-{count}"] = item;
count++;
}
}
我正在努力处理 redactor 中的多张图片上传。具体来说,在上传并保存图像后创建 return JSON。
我已经设法使用 StringBuilder
来做到这一点,但如果可能的话,我想使用 return Json(redactorResult, JsonRequestBehavior.AllowGet);
所需格式
从redactor demo page,我可以看到我需要的格式是:
{
"file-0": {
"url":"/tmp/images/b047d39707366f0b3db9985f97a56267.jpg",
" id":"70e8f28f4ce4a338e12693e478185961"
},
"file-1":{
"url":"/tmp/images/b047d39707366f0b3db9985f97a56267.jpg",
"id":"456d9b652c72a262307e0108f91528a7"
}
}
C#Class
但是要从 c# class 创建这个 JSON 我想我需要这样的东西:
public class RedactorFileResult
{
public string url {get;set;}
public string id {get;set;}
}
public class RedactorResult
{
public RedactorFileResult file-1 {get;set;}
public RedactorFileResult file-2 {get;set;}
// .. another property for each file...
}
...这在最坏的情况下似乎是不可能的(永远不知道将上传多少图像),充其量也有点不切实际。
问题
我的做法是否正确?有没有我不知道的方法可以做到这一点?
还是我最好在这种情况下坚持使用字符串生成器?
为单个项目定义 class:
public class File
{
public string Url { get; set; }
public string Id { get; set; }
}
然后像这样创建文件:
var files = new List<File>();
files.Add(new File{Url = "tmp/abc.jpg", Id = "42"});
files.Add(new File {Url = "tmp/cba.jpg", Id = "24"});
现在您可以使用 linq 查询获得所需的 json 输出:
var json = JsonConvert.SerializeObject(files.Select((f, i) => new {f, i})
.ToDictionary(key => $"file-{key.i}", value => value.f));
在我的例子中结果是:
{
"file-0":{
"Url":"tmp/abc.jpg",
"Id":"42"
},
"file-1":{
"Url":"tmp/cba.jpg",
"Id":"24"
}
}
定义项目:
class Item
{
public string Url { get; set; }
public string Id { get; set; }
}
那么你应该使用字典而不是 RedactorResult class,像这样:
var redactorResult = new Dictionary<string, Item>();
redactorResult["file-1"] = new Item(){ Url = "...", Id = "..." };
redactorResult["file-2"] = new Item(){ Url = "...", Id = "..." };
如果您更喜欢 RedactorResult class,您可以扩展字典:
class RedactorResult : Dictionary<string, Item>
{
private int count = 0;
public void Add(Item item)
{
this[$"file-{count}"] = item;
count++;
}
}