我有一个类,它是一个字符串的包装器,提供了一些额外的功能。在其他接口中,它还实现了IEnumerable<char>接口。
我希望能够使用JsonNet将其序列化为字符串。因为它不工作,而且总是序列化成一个数组--我想是因为IEnumerable<char>接口,所以我添加了ISerializable接口。但出于某种原因,JsonNet仍然创建一个数组并忽略ISerializable。添加SerializableAttribute也于事无补。
这里有一个概念代码的小证明,它演示了这种行为(对于LINQPad):
void Main()
{
JsonConvert.SerializeObject(new NotACollection("foo")).Dump(); // ["f","o","o"]
}
[Serializable]
class NotACollection : IEnumerable<char>, ISerializable
{
private readonly string _value;
public NotACollection(string value)
{
_value = value;
}
public IEnumerator<char> GetEnumerator()
{
return _value.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("_value", _value);
}
public override string ToString()
{
return _value;
}
}我知道我可以创建一个自定义的JsonCovert类,但是由于包装器位于一个不想引用JsonNet的库中,所以我更喜欢另一种解决方案。
我在这里做错什么了吗?我以为如果JsonNet可用的话,它会选择ISerializable实现吗?
(这个类不能实现对字符串的隐式转换,因为这将违背其目的并导致奇怪的错误)
发布于 2018-02-04 13:19:56
如果为要序列化的类添加[JsonObject(MemberSerialization.Fields)]属性,则应将类字段序列化为Json {"_value“:"foo”}
[JsonObject(MemberSerialization.Fields)]
internal class NotACollection : IEnumerable<char>, ISerializablehttps://stackoverflow.com/questions/48608281
复制相似问题