Сериализация списка <T>в C # и десериализация его в массив js - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть часть бритвы в моем javascript, но я не могу получить доступ к js-переменной, которая была введена в качестве параметра в js-функцию.

Я пытаюсьсериализовать список, а затем десериализовать строку json в массив js.

<script>
function listContainerBlobs(json, container) {
    @*var arr = @JsonConvert.DeserializeObject(json);*@
    var arr = JSON.parse(json);
    var blobs = document.getElementById('container-blob-display').innerHTML = "<h4>" + container + "</h4>";
    var otherDiv = document.getElementById('section-1');
    var thisDiv = document.getElementById('section-2');

    otherDiv.style.display = 'none';
    thisDiv.style.display = 'block';

    var blobNumber = 0;

    for (i = 0; i < arr.length; i++){
        blobNumber++;
        var blobId = "blobId" + blobNumber;
        blobs += "<p class='search-result' id='" + blobId + "' onclick='downloadBlob('" + blobId + "', '" + arr[i].Name + "', '" + container + "')' style='float: left; '>" + arr[i].Name + "</p>";
    }
}</script>

Это код C # на странице бритвы, который сериализует список, возвращаемый методом. Мне интересно, отличаются ли форматы строк json от других, и поэтому я не могу десериализовать строку json в js.

var blobs = await Model.ListContainerBlobs(container.Name);
var jsonBlob = Json.Serialize(blobs);
//var jsonBlob = JsonConvert.SerializeObject(blobs);

Я использую blobs в нескольких фрагментах и ​​прочее на html-странице, но подумалЯ бы использовал этот метод для вызова параметра в js-функции listContainerBlobs(json, container), поэтому в сериализации json.

Вызов функции Js:

<p class="search-result blob-container" id="@containerId" onclick="listContainerBlobs('@jsonBlob','@containerModel.Name')">@containerModel.Name</p>

Ошибка при отладке в браузере: enter image description here

При чтении это , это и это Полагаю, я просто должен признать, что не могу вызвать переменную js внутри бритвы.

У кого-нибудь есть обходной путь для этого или, может быть, лучшее решение для сериализации / десериализации этого списка c #?

Если важно, вот разные типы json, которые я сериализую в

  • Json. Сериализация (капли);:

"[{\" StreamWriteSizeInBytes \ ": 4194304, \" ServiceClient \ ": {\" BufferManager \ ": null, \" Учетные данные \ ": {\" SASToken \": нулевая, \" AccountName \ ": \" devstoreaccount1 \ "\ "имя_раздел \": нулевая, \ "IsAnonymous \" ложь \ "ИССАС \": ложь, \ "IsSharedKey \": правда, \"IsToken \ ": false, \" SASSignature \ ": null}, \" BaseUri \ ": \" http://127.0.0.1:10000/devstoreaccount1\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary\"},\"DefaultRequestOptions\":{\"RetryPolicy\":{},\"AbsorbConditionalErrorsOnRetry\":null,\"LocationMode\":0,\"ServerTimeout\":null,\"MaximumExecutionTime\":null,\"ParallelOperationThreadCount\":1,\"SingleBlobUploadThresholdInBytes\":134217728,\"UseTransactionalMD5\":null,\"StoreBlobContentMD5\":null,\"DisableContentMD5Validation\":null},\"RetryPolicy\":{},\"DefaultDelimiter\":\"/\",\"AuthenticationScheme\":1},\"StreamMinimumReadSizeInBytes\":4194304,\"Properties\":{\"CacheControl\":null,\"ContentDisposition\":null,\"ContentEncoding\":null,\"ContentLanguage\":null,\"Length\":68,\"ContentMD5\":\"YUP3oQ5rwX9qEtwa7Op0Iw==\",\"ContentType\":\"text/plain\",\"ETag\":\"\\"0x8D757BD9E066830\\"\",\"Created\":\"2019-10-22T09:06:29+00:00\",\"LastModified\":\"2019-10-23T13:33:40+00:00\",\"BlobType\":2,\"LeaseStatus\":2,\"LeaseState\":1,\"LeaseDuration\":0,\"PageBlobSequenceNumber\":null,\"AppendBlobCommittedBlockCount\":null,\"IsServerEncrypted\":true,\"IsIncrementalCopy\":false,\"StandardBlobTier\":0,\"RehydrationStatus\":null,\"PremiumPageBlobTier\":null,\"BlobTierInferred\":false,\"BlobTierLastModifiedTime\":null,\"DeletedTime\":null,\"RemainingDaysBeforePermanentDelete\":null},\"Metadata\":{},\"Uri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container/FirstBlob.txt\"},\"SnapshotTime\":null,\"IsSnapshot\":false,\"IsDeleted\":false,\"SnapshotQualifiedUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt\",\"SnapshotQualifiedStorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container/FirstBlob.txt\"},\"CopyState\":null,\"Name\":\"FirstBlob.txt\",\"Container\":{\"ServiceClient\":{\"BufferManager\":null,\"Credentials\":{\"SASToken\":null,\"AccountName\":\"devstoreaccount1\",\"KeyName\":null,\"IsAnonymous\":false,\"IsSAS\":false,\"IsSharedKey\":true,\"IsToken\":false,\"SASSignature\":null},\"BaseUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary\"},\"DefaultRequestOptions\":{\"RetryPolicy\":{},\"AbsorbConditionalErrorsOnRetry\":null,\"LocationMode\":0,\"ServerTimeout\":null,\"MaximumExecutionTime\":null,\"ParallelOperationThreadCount\":1,\"SingleBlobUploadThresholdInBytes\":134217728,\"UseTransactionalMD5\":null,\"StoreBlobContentMD5\":null,\"DisableContentMD5Validation\":null},\"RetryPolicy\":{},\"DefaultDelimiter\":\"/\",\"AuthenticationScheme\":1},\"Uri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"SecondaryUri\":\"http://127.0.0.1:10000/devstoreaccount1-secondary/first-container\"},\"Name\":\"first-container\",\"Metadata\":{},\"Properties\":{\"ETag\":null,\"HasImmutabilityPolicy\":null,\"HasLegalHold\":null,\"LastModified\":null,\"LeaseStatus\":0,\"LeaseState\":0,\"LeaseDuration\":0,\"PublicAccess\":null}},\"Parent\":{\"ServiceClient\":{\"BufferManager\":null,\"Credentials\":{\"SASToken\":null,\"AccountName\":\"devstoreaccount1\",\"KeyName\":null,\"IsAnonymous\":false,\"IsSAS\":false,\"IsSharedKey\":true,\"IsToken\":false,\"SASSignature\":null},\"BaseUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary\"},\"DefaultRequestOptions\":{\"RetryPolicy\":{},\"AbsorbConditionalErrorsOnRetry\":null,\"LocationMode\":0,\"ServerTimeout\":null,\"MaximumExecutionTime\":null,\"ParallelOperationThreadCount\":1,\"SingleBlobUploadThresholdInBytes\":134217728,\"UseTransactionalMD5\":null,\"StoreBlobContentMD5\":null,\"DisableContentMD5Validation\":null},\"RetryPolicy\":{},\"DefaultDelimiter\":\"/\",\"AuthenticationScheme\":1},\"Uri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container\"},\"Container\":{\"ServiceClient\":{\"BufferManager\":null,\"Credentials\":{\"SASToken\":null,\"AccountName\":\"devstoreaccount1\",\"KeyName\":null,\"IsAnonymous\":false,\"IsSAS\":false,\"IsSharedKey\":true,\"IsToken\":false,\"SASSignature\":null},\"BaseUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary\"},\"DefaultRequestOptions\":{\"RetryPolicy\":{},\"AbsorbConditionalErrorsOnRetry\":null,\"LocationMode\":0,\"ServerTimeout\":null,\"MaximumExecutionTime\":null,\"ParallelOperationThreadCount\":1,\"SingleBlobUploadThresholdInBytes\":134217728,\"UseTransactionalMD5\":null,\"StoreBlobContentMD5\":null,\"DisableContentMD5Validation\":null},\"RetryPolicy\":{},\"DefaultDelimiter\":\"/\",\"AuthenticationScheme\":1},\"Uri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"StorageUri\":{\"PrimaryUri\":\" http://127.0.0.1:10000/devstoreaccount1/first-container\",\"SecondaryUri\":\" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container\"},\"Name\":\"first-container\",\"Metadata\":{},\"Properties\":{\"ETag\":null,\"HasImmutabilityPolicy\":null,\"HasLegalHold\":null,\"LastModified\":null,\"LeaseStatus\":0,\"LeaseState\":0,\"LeaseDuration\":0,\"PublicAccess\":null}},\"Parent\":null,\"Prefix\":\"\"},\"BlobType\":2}]"

  • Jsonconvert.SerializeObject (blob);:

{[{ "streamWriteSizeInBytes": 4194304, "serviceClient": { "bufferManager": нулевой, "учетные данные": { "sasToken": нулевой, "AccountName": "devstoreaccount1", "KEYNAME": нулевой, "isAnonymous": false," isSAS ": false," isSharedKey ": true," isToken ": false," sasSignature ": null}," baseUri ":" http://127.0.0.1:10000/devstoreaccount1","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary"},"defaultRequestOptions":{"retryPolicy":{},"absorbConditionalErrorsOnRetry":null,"locationMode":0,"serverTimeout":null,"maximumExecutionTime":null,"parallelOperationThreadCount":1,"singleBlobUploadThresholdInBytes":134217728,"useTransactionalMD5":null,"storeBlobContentMD5":null,"disableContentMD5Validation":null},"retryPolicy":{},"defaultDelimiter":"/","authenticationScheme":1},"streamMinimumReadSizeInBytes":4194304,"properties":{"cacheControl":null,"contentDisposition":null,"contentEncoding":null,"contentLanguage":null,"length":68,"contentMD5":"YUP3oQ5rwX9qEtwa7Op0Iw==","contentType":"text/plain","eTag":"\u00220x8D757BD9E066830\u0022","created":"2019-10-22T09:06:29+00:00","lastModified":"2019-10-23T13:33:40+00:00","blobType":2,"leaseStatus":2,"leaseState":1,"leaseDuration":0,"pageBlobSequenceNumber":null,"appendBlobCommittedBlockCount":null,"isServerEncrypted":true,"isIncrementalCopy":false,"standardBlobTier":0,"rehydrationStatus":null,"premiumPageBlobTier":null,"blobTierInferred":false,"blobTierLastModifiedTime":null,"deletedTime":null,"remainingDaysBeforePermanentDelete":null},"metadata":{},"uri":" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container/FirstBlob.txt"},"snapshotTime":null,"isSnapshot":false,"isDeleted":false,"snapshotQualifiedUri":" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt","snapshotQualifiedStorageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1/first-container/FirstBlob.txt","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container/FirstBlob.txt"},"copyState":null,"name":"FirstBlob.txt","container":{"serviceClient":{"bufferManager":null,"credentials":{"sasToken":null,"accountName":"devstoreaccount1","keyName":null,"isAnonymous":false,"isSAS":false,"isSharedKey":true,"isToken":false,"sasSignature":null},"baseUri":" http://127.0.0.1:10000/devstoreaccount1","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary"},"defaultRequestOptions":{"retryPolicy":{},"absorbConditionalErrorsOnRetry":null,"locationMode":0,"serverTimeout":null,"maximumExecutionTime":null,"parallelOperationThreadCount":1,"singleBlobUploadThresholdInBytes":134217728,"useTransactionalMD5":null,"storeBlobContentMD5":null,"disableContentMD5Validation":null},"retryPolicy":{},"defaultDelimiter":"/","authenticationScheme":1},"uri":" http://127.0.0.1:10000/devstoreaccount1/first-container","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1/first-container","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container"},"name":"first-container","metadata":{},"properties":{"eTag":null,"hasImmutabilityPolicy":null,"hasLegalHold":null,"lastModified":null,"leaseStatus":0,"leaseState":0,"leaseDuration":0,"publicAccess":null}},"parent":{"serviceClient":{"bufferManager":null,"credentials":{"sasToken":null,"accountName":"devstoreaccount1","keyName":null,"isAnonymous":false,"isSAS":false,"isSharedKey":true,"isToken":false,"sasSignature":null},"baseUri":" http://127.0.0.1:10000/devstoreaccount1","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary"},"defaultRequestOptions":{"retryPolicy":{},"absorbConditionalErrorsOnRetry":null,"locationMode":0,"serverTimeout":null,"maximumExecutionTime":null,"parallelOperationThreadCount":1,"singleBlobUploadThresholdInBytes":134217728,"useTransactionalMD5":null,"storeBlobContentMD5":null,"disableContentMD5Validation":null},"retryPolicy":{},"defaultDelimiter":"/","authenticationScheme":1},"uri":" http://127.0.0.1:10000/devstoreaccount1/first-container","storageUri":{"primaryUri":"http://127.0.0.1:10000/devstoreaccount1/first-container","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container"},"container":{"serviceClient":{"bufferManager":null,"credentials":{"sasToken":null,"accountName":"devstoreaccount1","keyName":null,"isAnonymous":false,"isSAS":false,"isSharedKey":true,"isToken":false,"sasSignature":null},"baseUri":" http://127.0.0.1:10000/devstoreaccount1","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary"},"defaultRequestOptions":{"retryPolicy":{},"absorbConditionalErrorsOnRetry":null,"locationMode":0,"serverTimeout":null,"maximumExecutionTime":null,"parallelOperationThreadCount":1,"singleBlobUploadThresholdInBytes":134217728,"useTransactionalMD5":null,"storeBlobContentMD5":null,"disableContentMD5Validation":null},"retryPolicy":{},"defaultDelimiter":"/","authenticationScheme":1},"uri":" http://127.0.0.1:10000/devstoreaccount1/first-container","storageUri":{"primaryUri":" http://127.0.0.1:10000/devstoreaccount1/first-container","secondaryUri":" http://127.0.0.1:10000/devstoreaccount1-secondary/first-container"},"name":"first-container","metadata":{},"properties":{"eTag":null,"hasImmutabilityPolicy":null,"hasLegalHold":null,"lastModified":null,"leaseStatus":0,"leaseState":0,"leaseDuration":0,"publicAccess":null}},"parent":null,"prefix":""},"blobType":2}]}

Чтобы воссоздать это, сериализуйте список с помощью C #, отправьте строку json через onclick =" "в вашу js-функцию и десериализуйте строку внутрифункция.

1 Ответ

0 голосов
/ 05 ноября 2019

Мне пришлось обойти проблему, создав собственный объект, содержащий значения, которые я хотел / нуждался.

List<object> objects = new List<object>();

objects.Add(new
    {
        blobCount = blobs.Count,
        blobs = blobs.Select(x => new
        {
            Name = x.Name,
            Container = x.Container,
            Blobtype = x.BlobType,
            Uri = x.Uri
         })
     });

var jsonBlob = JsonConvert.SerializeObject(blobObject);

Я заметил, что результат десериализации строки json был ошибочным. Одна часть строки не была правильно десериализована (согласно моим человеческим глазам и уму, но, вероятно, правильно согласно формату json). В любом случае это свойство мне не понадобилось, поэтому в моем случае это прекрасно работает.

Надеюсь, это может помочь кому-то еще ...

Также согласно этоссылка (которая проверяет, является ли формат вашей json-строки допустимым), Json.Serialize (i) был корректным, но стал неисправным в браузере, а JsonConverter.SerializeObject (i) был недействительным. Хотя после составления нового списка объектов последний был тем, который работал, а не первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...