簡體   English   中英

使用base64編碼的文件附件反序列化json文件

[英]deserialize json file with base64 encoded file attachments

我正在嘗試使用JSON.NET從JSON文件反序列化base64文件附件。 我可以使用以下代碼反序列化數據,但是我不確定如何解碼base64文件。 請告訴我。

Sample JSON file
-----------------
PostData: {
  "Main":{
     "date1": "14-JAN-2016",
     "summary": "summary test",
     "Details":[{
       "first": "test",
       "last": "last test",
        },
      ]}
     "attachments":[        {
       "title": "Report1.pdf",
       "file_name": "Report1.pdf",
       "file_content_type": "application/pdf",
       "file_format": "binary",
       "file_data": "JVBERi0xLjQNCjUgMCBvYmoNCjw8DQovVHlwZSAvWE9iamVjdA0KL1N1YnR5cGUg
        MSAwIFIvSW5mbyAxMjYgMCBSL0lEWzw0NTQ3QjRFREZBNjk2NDQ4QjhBNUU4MUQw
        QkU4MkVDMD48NDU0N0I0RURGQTY5NjQ0OEI4QTVFODFEMEJFODJFQzA+XSAvUHJl
        diAxMTI3OTI5L1hSZWZTdG0gMTEyNjMxNj4+DQpzdGFydHhyZWYNCjExNDAyNTEN
        CiUlRU9G",
        },
        {
       "title": "src.txt",
       "file_name": "src.txt",
       "file_content_type": "text/plain",
       "file_format": "text",
       "file_data": "bm5gLDJ9NC1DNFkpN20y4tLmM0",
        },
  ]}
}

Program.cs中

var json = System.IO.File.ReadAllText("postData.json");
var myJsonObject = JsonConvert.DeserializeObject<PostData>(json);

    public class PostData
    {
        public Main main { get; set; }
    }

    public class Main
    {

        public string date1 { get; set; }
        public string summary { get; set; }
        public List<Details> details { get; set; }
    }

  public class Details
    {
        public string first { get; set; }
        public string last { get; set; }
    }

如其序列化指南中所述 ,Json.NET自動將Byte []數組反序列化為Base64字符串。 因此, 清理完JSON之后,您可以將其上傳到http://json2csharp.com/以自動生成類,然后file_data屬性修改為byte []類型 ,結果如下所示:

public class Detail
{
    public string first { get; set; }
    public string last { get; set; }
}

public class Main
{
    public string date1 { get; set; }
    public string summary { get; set; }
    public List<Detail> Details { get; set; }
}

public class Attachment
{
    public string title { get; set; }
    public string file_name { get; set; }
    public string file_content_type { get; set; }
    public string file_format { get; set; }
    public byte [] file_data { get; set; }
}

public class PostData
{
    public Main Main { get; set; }
    public List<Attachment> attachments { get; set; }
}

現在您可以反序列化如下:

var myJsonObject = JsonConvert.DeserializeObject<RootObject>(json);

然后,要將反序列化的字節數組保存到磁盤,可以使用File.WriteAllBytes()執行以下File.WriteAllBytes()

foreach (var attachment in myJsonObject.PostData.attachments ?? Enumerable.Empty<Attachment>())
{
    File.WriteAllBytes(attachment.file_name, attachment.file_data);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM