Я делаю несколько тестов, чтобы проверить / понять сериализацию JSON в / из типов .Net в C #.
Я пытаюсь использовать DataContractJsonSerializer.
Вот пример типа, который я пытаюсь сериализовать:
[DataContract]
[KnownType(typeof(HashSet<int>))]
public class TestModel
{
[DataMember]
public string StreetName { get; private set; }
[DataMember]
public int StreetId { get; private set; }
[DataMember]
public int NumberOfCars { get; set; }
[DataMember]
public IDictionary<string, string> HouseDetails { get; set; }
[DataMember]
public IDictionary<int, string> People { get; set; }
[DataMember]
public ISet<int> LampPosts { get; set; }
public TestModel(int StreetId, string StreetName)
{
this.StreetName = StreetName;
this.StreetId = StreetId;
HouseDetails = new Dictionary<string, string>();
People = new Dictionary<int, string>();
LampPosts = new HashSet<int>();
}
public void AddHouse(string HouseNumber, string HouseName)
{
HouseDetails.Add(HouseNumber, HouseName);
}
public void AddPeople(int PersonNumber, string PersonName)
{
People.Add(PersonNumber, PersonName);
}
public void AddLampPost(int LampPostName)
{
LampPosts.Add(LampPostName);
}
}
Когда я пытаюсь сериализовать объект этого типа, используя DataContractJsonSerializer, я получаю следующую ошибку:
{"'System.Collections.Generic.HashSet`1[System.Int32]' is a collection type and cannot be serialized when assigned to an interface type that does not implement IEnumerable ('System.Collections.Generic.ISet`1[System.Int32]'.)"}
Это сообщение мне не подходит. ISet<T>
реализует IEnumerable<T>
(а также IEnumerable).
Если в моем классе TestModel я заменяю
public ISet<int> LampPosts { get; set; }
с
public ICollection<int> LampPosts { get; set; }...
тогда все проплывает.
Я новичок в JSON, поэтому любая помощь будет принята с благодарностью