............................................... ................................
更新:
在以下注释的指导下,我发现在调试器中查看的实际上是正确的JSON。但是,从Blob返回的文本不是全文-文件末尾缺少一小部分字符。
我正在使用JsonConvert创建此文本文件,该文件最终以JSON形式作为ViewModel的序列化版本。
我最终解决了缺少文本的问题,是更改了将文本上传到Blob的方式。我从中更改了代码:
Stream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine(serializedViewModel);
memoryStream.Position = 0;
blob.UploadFromStream(memoryStream);
对此
var options = new BlobRequestOptions()
{
ServerTimeout = TimeSpan.FromMinutes(10)
};
using (var memoryStream = new MemoryStream(System.Text.Encoding.Default.GetBytes(serializedViewModel), false))
{
blob.UploadFromStream(memoryStream, null, options);
}
我不知道为什么第一种方法不起作用,但是现在全文已上传到Blob,并且可以下载和使用。
............................................... .................................
当我将这样的内容作为文本文件上传时(可以从Storage Explorer手动下载并以.txt文件的形式在记事本中查看)...
{
"$id": "1",
"ReportBuilderModel": null,
"ReportBuilderModelId": 0,
"ReportSections": [
{
"$id": "2",
"ReportSectionModel": {
"$id": "3",
"SectionFile": null,
"Id": 1182,
"ReportBuilderModelId": 36,
"SectionName": "Issue Summary",
"SectionType": 6,
"Position": 0,
"ParentSectionId": null,
"TimeOfReport": "2018-07-28T04:56:38.93",
}
}
...使用此代码...
Stream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine(serializedViewModel);
// Get container reference.
blobContainer = blobClient.GetContainerReference("containerReference");
// Create the container if it doesn't already exist.
blobContainer .CreateIfNotExists();
memoryStream.Position = 0;
blockBlob = textFileContainer.GetBlockBlobReference("containerReference");
blockBlob.UploadFromStream(memoryStream);
...以及使用此代码从Blob存储下载文件时...
using (var memoryStream = new MemoryStream())
{
blockBlob.DownloadToStream(memoryStream);
string serializedData = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
... serializedData看起来像这样...
“ {\ r \ n \” $ id \“:\” 1 \“,\ r \ n \” ReportBuilderModel \“:空,\ r \ n \” ReportBuilderModelId \“:0,\ r \ n \“ ReportSections \”:[\ r \ n {\ r \ n \“ $ id \”:\“ 2 \”,\ r \ n \“ ReportSectionModel \”:{\ r \ n \“ $ id \” :\“ 3 \”,\ r \ n \“ SectionFile \”:null,\ r \ n ...
请帮助。
答案 0 :(得分:1)
有时某些字符需要转义,这就是为什么JSON文件看起来像现在这样的原因。在您的情况下,JSON字符串中的引号(“)是需要转义的字符。
如果格式确实对您很重要,则只需替换不必要的字符,例如...
string str = "{\r\n \"$id\": \"1\",\r\n \"ReportBuilderModel\": null,\r\n \"ReportBuilderModelId\": 0,\r\n \"ReportSections\": [\r\n {\r\n \"$id\": \"2\",\r\n \"ReportSectionModel\": {\r\n \"$id\": \"3\",\r\n \"SectionFile\": null,\r\n ...";
str = str.Replace("\"", "");
如果您也想摆脱line feed
和carriage return
,则可以像以前一样这样做:
str = str.Replace("\r\n", "");
之后,str
的值为:
"{ $id: 1, ReportBuilderModel: null, ReportBuilderModelId: 0, ReportSections: [ { $id: 2, ReportSectionModel: { $id: 3, SectionFile: null, ..."
在计算和电信中,转义字符是一个字符 这将对后续字符进行替代解释 按字符顺序。转义字符是 元字符。通常,判断某物是否为 是否转义字符取决于上下文。