Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以复制JsonObjectAttribute的行为?_C#_Serialization_Json.net_Deserialization - Fatal编程技术网

C# 是否可以复制JsonObjectAttribute的行为?

C# 是否可以复制JsonObjectAttribute的行为?,c#,serialization,json.net,deserialization,C#,Serialization,Json.net,Deserialization,我正在尝试序列化/反序列化另一个包中的类,该包实现IEnumerable,但也包含我希望包含在序列化流中的其他属性 public class MyList<T> : IList<T> { private List<T> _list; public Foo Bar { get; set; } // IList implementation ... } 由于我已经在使用自定义的ContractResolver对私有字段进行序列化/反序列

我正在尝试序列化/反序列化另一个包中的类,该包实现IEnumerable,但也包含我希望包含在序列化流中的其他属性

public class MyList<T> : IList<T>
{
    private List<T> _list;
    public Foo Bar { get; set; }

    // IList implementation ...
}

由于我已经在使用自定义的
ContractResolver
对私有字段进行序列化/反序列化,我是否可以简单地重新编写
if
子句,以使用与应用
JsonObjectAttribute
时使用的相同的
Converter

您能确切地说明您需要什么吗?您只是在应用默认的
[JsonObject]
,还是希望设置一些
JsonObjectAttribute
属性,例如
[JsonObject(MemberSerialization=MemberSerialization.Fields)]
?例如,如果您需要
[JsonObject(MemberSerialization=MemberSerialization.Fields)]
,这可能与以下内容有关:(尽管那里的要求比你的复杂)@dbc:我想要的是能够序列化/反序列化一个对象,该对象将
IList
实现为
对象,而不是
IEnumerable
,而无需编写我自己的
JsonConverter
。在
Json.Net
中必须已经有一个转换器具有这种行为,并且是
jsonobjectattribute的转换器e
必须强制
Json.Net
使用否,没有转换器。注意到存在
JsonObjectAttribute
并调用
CreateObjectContract(objectType)
。这很容易用自定义协定解析程序实现。更难的是模拟所有
JsonObjectAttribute
的功能。那么,您需要它们吗?还是只需要
[JsonObject]
@dbc
[JsonObject]
就足够了。那么所需要的就是
覆盖
CreateContract
并返回
CreateObjectContract
public class ConverterContractResolver : DefaultContractResolver
{
    public new static readonly ConverterContractResolver Instance = new ConverterContractResolver();

    protected override JsonContract CreateContract(Type objectType)
    {
        JsonContract contract = base.CreateContract(objectType);

        // this will only be called once and then cached
        if (objectType == typeof(DateTime) || objectType == typeof(DateTimeOffset))
        {
            contract.Converter = new JavaScriptDateTimeConverter();
        }

        return contract;
    }
}