【问题标题】:Serializing a List<T> in C# and deserializing it into js array在 C# 中序列化 List<T> 并将其反序列化为 js 数组
【发布时间】:2019-11-01 08:15:45
【问题描述】:

我的 javascript 中有一个 razor 部分,但无法访问已作为参数放入 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>

这是 razor 页面中的 C# 代码,用于序列化方法返回的列表。我想知道json字符串的格式是否不同,因此我无法在js中反序列化json字符串。

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

我在一些 lopps 和 html 页面中的东西中使用了 blobs,但我认为我会将此方法调用重用于 js 函数 listContainerBlobs(json, container) 中的参数,因此是 json 序列化。

Js-函数调用:

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

在浏览器中调试时收到错误:

通过阅读thisthisthis,我想我只能接受我不能在剃须刀中调用 js 变量。

是否有人对此有解决方法,或者对此 c# 列表的序列化/反序列化有更好的解决方案?

如果这里重要的是我序列化成的不同 json 类型

  • Json.Serialize(blob); :

"[{\"StreamWriteSizeInBytes\":4194304,\"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\":\"@987654327 @\"},\"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\":\"YUP3oQ5rwX9qEtwa7Op0I w==\",\"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\":\"@987654331 @\",\"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,\"名称\":\"FirstBlob.txt\",\"Container\":{\"ServiceClient\":{\"BufferManager\":null,\"Credent ials\":{\"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\"},\"名称\":\ "first-container\",\"Metadata\":{},\"Properties\":{\"ETag\":null,\"HasImmutabilityPolicy\":null,\"HasLegalHold\":null,\"LastModified \":null,\"LeaseStatus\":0,\"LeaseState\":0,\"LeaseDura化\":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,\"Accoun tName\":\"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}},\ "父\":null,\"前缀\":\"\"},\"BlobType\":2}]"

  • Jsonconvert.SerializeObject(blob); :

{[{"streamWriteSizeInBytes":4194304,"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":"@ 987654353@","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":假,"sasSignature":null},"baseUri":"@9876 54361@","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":"@ 987654366@"},"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","sto rageUri":{"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# 序列化一个 List,通过 onclick="" 将 json 字符串发送到您的 js 函数并反序列化函数内的字符串。

【问题讨论】:

  • 为什么不能在listContainerBlobs 函数中将@JsonConvert.DeserializeObject(json) 替换为JSON.parse(json)JSON.parse(注意,p 中的小写 parse)适用于数组。如果由于某种原因它对您不起作用,您能否在您的问题中发布 minimal reproducible example 以便我们重现该问题?
  • @BrianRogers JSON.parse 会很棒(然后我不必在 javascript 中使用 raor)。虽然我收到一个错误,我想知道这是否是因为 json.parse 和 Json.Serialize 的 json 字符串格式不同(也尝试过 JsonConvert.SerializeObject,但它们似乎都不起作用)。我会更新我的问题。

标签: javascript json razor json.net


【解决方案1】:

我必须通过创建自己的包含我想要/需要的值的对象来解决问题。

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-string 的结果是错误的。字符串的一部分未正确反序列化(根据我的人眼和思想,但根据 json 格式可能正确)。反正我不需要这个属性,所以这在我的情况下非常有效。

希望这可能对某人有所帮助...

还根据this link(检查您的 json 字符串的格式是否有效),Json.Serialize(i) 是正确的,但在浏览器内部出现故障,并且 JsonConverter.SerializeObject(i) 无效。尽管在制作了新的对象列表之后,后者是正在工作的对象,而不是第一个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2021-10-11
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多