在 C# 中序列化 List<T> 并将其反序列化为 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# 代码,它序列化了一个方法返回的 List。我想知道 json 字符串的格式是否不同,因此我无法在 js 中反序列化 json 字符串。


var blobs = await Model.ListContainerBlobs(container.Name);

var jsonBlob = Json.Serialize(blobs);

//var jsonBlob = JsonConvert.SerializeObject(blobs);

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


js函数调用:


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

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

http://img3.mukewang.com/61b5c4190001450105680099.jpg

有没有人对此有解决方法,或者有更好的解决方案来序列化/反序列化这个 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\":\" http://127.0.0.1:10000/devstoreaccount1-secondary\"},\"DefaultRequestOptions\":{\"RetryPolicy\":


UYOU
浏览 254回答 1
1回答

牧羊人nacy

我必须通过创建一个包含我想要/需要的值的我自己的对象来做一个解决方法。List<object> objects = new List<object>();objects.Add(new&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; blobCount = blobs.Count,&nbsp; &nbsp; &nbsp; &nbsp; blobs = blobs.Select(x => new&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = x.Name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Container = x.Container,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Blobtype = x.BlobType,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Uri = x.Uri&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;})&nbsp; &nbsp; &nbsp;});var jsonBlob = JsonConvert.SerializeObject(blobObject);我注意到反序列化 json-string 的结果是错误的。字符串的一部分没有正确反序列化(根据我的人眼和思想,但根据 json 格式可能是正确的)。反正我不需要这个属性,所以这在我的情况下非常有效。希望这可以帮助别人别人...同样根据此链接(检查您的 json 字符串的格式是否有效), Json.Serialize(i) 是正确的,但在浏览器中出现故障,并且 JsonConverter.SerializeObject(i) 无效。虽然在制作了一个新的对象列表之后,后者是工作的对象而不是第一个对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript