是否可以使用c#类创建此JSON格式?

时间:2018-03-17 14:34:29

标签: c# json asp.net-mvc upload redactor

我在redactor中努力处理多张图片上传工作。具体来说,在上传和保存图像后创建返回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#类创建这个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...
}

......这在最坏的情况下似乎是不可能的(永远不知道会上传多少张图片),而且最多也有点不切实际。

问题

我接近这个吗?有没有办法做到这一点,我不知道?

或者我最好只是坚持使用字符串构建器吗?

2 个答案:

答案 0 :(得分:4)

为单个项目定义一个类:

datepicker

然后像这样创建你的文件:

public class File
{
    public string Url { get; set; }
    public string Id { get; set; }
}

现在,您可以使用linq查询获得所需的json输出:

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"});

在我的示例中,结果将是:

var json = JsonConvert.SerializeObject(files.Select((f, i) => new {f, i})
    .ToDictionary(key => $"file-{key.i}", value => value.f));

答案 1 :(得分:2)

定义项目:

class Item 
{
    public string Url { get; set; }
    public string Id { get; set; }  
}

然后你应该使用字典而不是RedactorResult类,如下所示:

var redactorResult = new Dictionary<string, Item>();
redactorResult["file-1"] = new Item(){ Url = "...", Id = "..." };
redactorResult["file-2"] = new Item(){ Url = "...", Id = "..." }; 

如果您更喜欢RedactorResult类,则可以扩展Dictionary:

class RedactorResult : Dictionary<string, Item>
{
    private int count = 0;

    public void Add(Item item) 
    {
        this[$"file-{count}"] = item;
        count++;
    }
}