C# 转换列表<;CustomObject>;到JSON

C# 转换列表<;CustomObject>;到JSON,c#,json,C#,Json,我有一个设备类型列表,类别如下 我想获取包含带有参数的对象的列表,并将该数据序列化为json 我当前实现的问题是,我返回的列表看起来像:[]、[]、[]、[]、[]、[]、[]、[]、[]、[]…但是我的对象中包含了我可以访问的数据:\u facility[0]。FacilityName或\u facility[0]。FacilityId。但是当我序列化它时,我没有得到那些值 如何深入获取此数据并将其序列化 Facility.cs public class Facility : List<

我有一个设备类型列表,类别如下

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

我当前实现的问题是,我返回的列表看起来像:
[]、[]、[]、[]、[]、[]、[]、[]、[]、[]
…但是我的对象中包含了我可以访问的数据:
\u facility[0]。FacilityName
\u 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;
    }
}
公共类设施:列表
{
[必需]
[显示(Name=“Facility”)]
公共字符串设施名称{get;set;}
公共字符串FacilityIdSource{get;set;}
公共设施()
{
//默认构造函数
}
公共设施(字符串facilityName、字符串facilityIdSource)
{
this.FacilityName=FacilityName;
this.FacilityIdSource=FacilityIdSource;
}
}
调用以填充设备类的代码

 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;
    }
公共异步任务设施同步()
{
ViewBag.SyncOrAsync=“异步”;
var服务=新设施服务();
此._facilities=新列表();
_设施=等待服务。GetFacilitiesBySourceDbAsync(“参数”);
字符串json=“”;
对于(int i=0;i<\u facilities.Count;i++)
{
json+=JsonConvert.SerializeObject(_facilities[i].FacilityName);
}
返回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>

$(函数(){
var结果=null;
$.ajax({
beforeSend:函数(){
警报(“测试”);
},
url:“设施同步”,
成功:功能(数据){
结果=数据;
},
完成:函数(){
警报(结果);
}
});
});
$(函数(){
var availableTags=[
//将JSON的结果放在这里
];
$(“#标记”).autocomplete({
资料来源:availableTags
});

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

在介绍XML序列化的文章中:

可以序列化的项目

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

  • 公共类的公共读/写属性和字段
  • 实现ICollection或IEnumerable的类
注意:只有集合是序列化的,而不是公共属性。

  • XmlElement对象
  • XmlNode对象
  • 数据集对象

DataContractSerializer应该正确处理此问题。

作为调试步骤,请尝试使用
JavaScriptSerializer
。您是否得到了预期的结果?
Facility:List
?这会伤到我的大脑:((但说真的,我不明白如何明智地将这样的类序列化为JSON;您可能有一个
Facility
类,该类具有
列表子类
属性)根据他的代码,设施似乎不能有子设施。设施似乎只有一个名称和id。您应该删除
:List
部分。对于序列化,如果将集合作为只读属性包含,则会更简单,只要符合您的接口要求,我会尝试。