首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonNet偏爱IEnumerable而不是ISerializable

JsonNet偏爱IEnumerable而不是ISerializable
EN

Stack Overflow用户
提问于 2018-02-04 12:55:39
回答 1查看 59关注 0票数 1

我有一个类,它是一个字符串的包装器,提供了一些额外的功能。在其他接口中,它还实现了IEnumerable<char>接口。

我希望能够使用JsonNet将其序列化为字符串。因为它不工作,而且总是序列化成一个数组--我想是因为IEnumerable<char>接口,所以我添加了ISerializable接口。但出于某种原因,JsonNet仍然创建一个数组并忽略ISerializable。添加SerializableAttribute也于事无补。

这里有一个概念代码的小证明,它演示了这种行为(对于LINQPad):

代码语言:javascript
复制
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实现吗?

(这个类不能实现对字符串的隐式转换,因为这将违背其目的并导致奇怪的错误)

EN

回答 1

Stack Overflow用户

发布于 2018-02-04 13:19:56

如果为要序列化的类添加[JsonObject(MemberSerialization.Fields)]属性,则应将类字段序列化为Json {"_value“:"foo”}

代码语言:javascript
复制
    [JsonObject(MemberSerialization.Fields)]
    internal class NotACollection : IEnumerable<char>, ISerializable
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48608281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档