如何修复:arraylist的System.Runtime.Serialization.InvalidDataContractException

时间:2019-07-18 18:45:42

标签: c# wcf iis-7.5

我正在为我们的服务编写一个新的DataContract(该服务位于Windows服务中并由iis公开)。在主类中,我有一个Arraylist成员,当我公开该对象时,我得到System.Runtime.Serialization.InvalidDataContractException如果将成员更改为“ List <>”,那么一切就很好了(它通过postman-> iis-> windows完成服务)。

课程是:

namespace Kitchen
{
    [Serializable()]
    [DataContract]
    [KnownType(typeof(Fruit))]
    [XmlInclude(typeof(Fruit))]
    public class Foods
    {

        private ArrayList uniFood;
        private List<string> lstCity;

        [DataMember]
        [XmlElement(typeof(Fruit))]         
        public ArrayList FoodArr
        {
            get
            {
                return uniFood;
            }
            set
            {
                uniFood = value;
            }
        }

        [DataMember]
        [XmlIgnore]
        public List<string> CityGrown
        {
            get
            {
                return lstCity;
            }
            set
            {
                lstCity = value;
            }
        }


        [DataMember]
        [XmlIgnore]
        public bool IsMerge
        {
            get;
            set;
        }

        [DataMember]
        [XmlIgnore]
        public bool IsRipe
        {
            get;
            set;
        }


        public Foods()
        {
            uniFood = new ArrayList();
            lstCity = new List<string>();
        }
    }
}

尝试将类发送到服务引用时遇到的错误: System.Runtime.Serialization.InvalidDataContractException:类型'Newtonsoft.Json.Linq.JToken'是不支持的递归集合数据协定。考虑修改集合“ Newtonsoft.Json.Linq.JToken”的定义以删除对其自身的引用。

任何帮助将不胜感激

这是api中的一项新功能,适用于vs2013。在过去,我曾尝试将arraylist更改为List <>,这很有帮助,但我需要将它作为数组列表,因为当序列化为xml时,它显示为:

1 个答案:

答案 0 :(得分:0)