- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一些测试来检查/理解 C# 中与 .Net 类型之间的 JSON 序列化。我正在尝试使用 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 新手,因此我们将不胜感激
最佳答案
看起来这是一个known microsoft bug 。支持的接口(interface)列表在框架中硬编码,并且 ISet
不是其中之一:
CollectionDataContract.CollectionDataContractCriticalHelper._knownInterfaces = new Type[]
{
Globals.TypeOfIDictionaryGeneric,
Globals.TypeOfIDictionary,
Globals.TypeOfIListGeneric,
Globals.TypeOfICollectionGeneric,
Globals.TypeOfIList,
Globals.TypeOfIEnumerableGeneric,
Globals.TypeOfICollection,
Globals.TypeOfIEnumerable
};
是的,错误消息不正确。因此,DataContractJsonSerializer
无法序列化 ISet
接口(interface),应将其替换为受支持的接口(interface)之一,或者具体的 ISet
实现。
关于.net - 使用 DataContractJsonSerializer 将 ISet<T> 序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453988/
dataElementsList : TypesAndData.DataElement list 是一个包含 50,000 条记录的列表(实际上更多,但让我们从小处开始)。我正在尝试序列化为 JSON
我注意到,使用 DataContractJsonSerializer 时,序列化的 JSON 字符串有时包含以下形式的类型信息 {"__type":"MyClass:#MyNamespace", ..
我在 Windows Phone 7.1 (Mango RC) 上使用 DataContractJsonSerializer 从网络服务中提取数据。来 self 的 Web 服务的数据如下所示: [
是否有序列化/反序列化场景 DataContractSerializer 可以处理,而DataContractJsonSerializer 不能? 特别是,我正在考虑循环引用:this MSDN pa
我将使用 DataContractJsonSerializer 进行 JSON 序列化/反序列化。 我在 JSON 数组中有两个对象类型,并希望将它们都反序列化为相应的对象类型。具有以下类定义 [Da
环境:Windows 10 Fall Creators Update (1709) 上的 Visual Studio 2017 目标:使用 DataContractJsonSerializer 序列化
using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using
我希望有一个 Dictionary 对象的形式: var dict = new Dictionary() { {"blah", "bob"}, {"blahagain", "bob"}
我在使用我的类(class)时遇到此错误。 错误 Expecting element 'root' from namespace ''.. Encountered 'None' with name '
有没有办法改变 DataContractJsonSerializer 序列化日期的方式? 目前,它会将日期转换为如下形式: { “日期”:“/日期(1260597600000-0600)/” 我想把它
我正在使用 DataContractJsonSerializer 将我的自定义对象序列化为 JSON。但我想跳过值为 null 的数据成员。如果 DataMember 为 null,则该节点不应出现在
我有以下 JSON 片段: [{ "name": "numToRetrieve", "value": "3", "label": "Number of items to ret
当我使用 DataContractJsonSerializer 序列化枚举值时,它会序列化枚举的数值,而不是字符串名称。 IE: enum foo { bar, baz } 序列化 foo
DataContractJsonSerializer 无法正确序列化字典。 而 JavaScriptSerializer 将字典序列化为 {"abc":"xyz","def":42}例如,DataCo
我们最近遇到了一个奇怪的问题,JSON 对象的两个属性没有被反序列化。 鉴于此类: [DataContract] public class Hotel { [DataMember] publi
我们最近遇到了一个奇怪的问题,一个 JSON 对象的两个属性没有被反序列化。 给定这个类: [DataContract] public class Hotel { [DataMember] p
你好,我有这个代码: 通过 HttpClient 我收到了这个 json 字符串: {"group":3,"data":[{"count":1,"providerName":"BetaDigital"
我在我的 3-4 个方法中有一个序列化类对象的通用代码,所以我正在考虑为该代码创建一个通用函数并在所有方法中调用函数 我正在通过以下代码进行此操作 DataContractJsonSerializer
我正在上以下课: [DataContract] class ExampleClass { //Properties [DataMember(Name = "method")]
我正在使用 DataContractJsonSerializer 序列化批量数据,但遇到错误即。 引发了“System.OutOfMemoryException”类型的异常。 public stati
我是一名优秀的程序员,十分优秀!