将List <customobject>转换为JSON </customobject>

时间:2013-11-14 20:28:33

标签: c# json

我有一个类型为Facility的列表,类如下。

我想获取包含带参数的对象的列表,并将该数据序列化为json。

我当前实现的问题是我找回了一个类似于[],[],[],[],[]的列表....但我的对象其中可以访问的数据,如下所示: _facility[0].FacilityName_facility[0].FacilityId。但是当我序列化时,我没有得到这些值。

如何向下钻取以获取此数据并将其序列化?

Facility.cs

public class Facility : List<Facility>
{
    [Required]
    [Display(Name = "Facility")]
    public string FacilityName { get; set; }
    public string FacilityIdSource { get; set; }

    public Facility()
    {
        // Default Constructor
    }

    public Facility(string facilityName, string facilityIdSource)
    {
        this.FacilityName = facilityName;
        this.FacilityIdSource = facilityIdSource;
    }
}

调用代码来填充Facility类

 public async Task<string> FacilitiesAsync()
    {
        ViewBag.SyncOrAsync = "Asynchronous";
        var service = new FacilitiesService();

        this._facilities = new List<Facility>();

        _facilities = await service.GetFacilitiesBySourceDbAsync("param");

        string json = "";

        for (int i = 0; i < _facilities.Count; i++)
        {
            json += JsonConvert.SerializeObject(_facilities[i].FacilityName);
        }

        return json;
    }

现在,我在jQuery的完整函数中看到了警告框中的json。如何为availableTags分配数组?

<script type="text/javascript">
    $(function() {
    var result = null;
    $.ajax({
        beforeSend: function () {
            alert("Testing");
        },
        url: "FacilitiesAsync",
        success: function (data) {
            result = data;
        },
        complete: function () {
            alert(result);
        }
    });
});

$(function () {
    var availableTags = [
        // Place results from JSON here
    ];
    $("#tags").autocomplete({
        source: availableTags
    });
</script>

1 个答案:

答案 0 :(得分:0)

默认序列化程序不会序列化实现ICollection的对象的属性。

从介绍XML序列化的文章:

http://msdn.microsoft.com/en-us/library/182eeyhh(v=vs.110).aspx

可以序列化的项目

可以使用XmLSerializer类序列化以下项目:

  • 公共读/写属性和公共类的字段。
  • 实现ICollection或IEnumerable的类。

注意:只有集合是序列化的,而不是公共属性。

  • XmlElement对象。
  • XmlNode对象。
  • DataSet对象。

DataContractSerializer应该正确处理这个问题。