ReadJson和WriteJson与Divan couchdb一起使用,但不适用于Newtonsoft的Json.Net。

约翰·恩肖

我有一个包含DateTime属性的类,我将它作为WriteJson重写中的数组写到沙发上,并从JsonRead重写中的数组中读取,当使用Divan保存或从沙发中加载时,它工作得很好。

我的问题是,我使用http将Newtonsoft.Json序列化的字符串传递给我的应用程序的另一个实例(在单独的计算机上运行),但是Newtonsoft不会触发我的读写权限。

相反,Newtonsoft尝试从字符串而不是数组中解析json属性(我认为是Newtonsoft的JsonConverter的默认行为?),我无法更改其工作方式,因为它需要能够与旧文档进行集成我们拥有的系统。

如何让Json.net调用ReadJson和WriteJson的替代项?

public class JobResults : CouchDocument, ICanJson
{
    [JsonProperty("update-datetime")]
    public DateTime UpdateDateTime = new DateTime(1, 1, 1, 0, 0, 0);

    [JsonProperty("job-ids")]
    public JArray JobIDs = new JArray();


    #region CouchDocument Members

        public override void WriteJson(JsonWriter writer)
        {
            base.WriteJson(writer);

            writer.WritePropertyName("update-datetime");
            writer.WriteStartArray();
            writer.WriteValue(UpdateDateTime.Year);
            writer.WriteValue(UpdateDateTime.Month);
            writer.WriteValue(UpdateDateTime.Day);
            writer.WriteValue(UpdateDateTime.Hour);
            writer.WriteValue(UpdateDateTime.Minute);
            writer.WriteValue(UpdateDateTime.Second);
            writer.WriteEndArray();

            writer.WritePropertyName("job-ids");
            writer.WriteStartArray();
            foreach (string i in JobIDs)
                writer.WriteValue(i);
            writer.WriteEndArray();
        }

        public override void ReadJson(JObject obj)
        {
            base.ReadJson(obj);

            var dt = obj["update-datetime"].Value<JArray>();
            UpdateDateTime = new DateTime((int)dt[0], (int)dt[1], (int)dt[2], (int)dt[3], (int)dt[4], (int)dt[5]);
            JobIDs = obj["job-ids"].Value<JArray>();
        }

        #endregion
}
约翰·恩肖

没关系,我添加了JsonConverter属性并将其指向其他类。

[JsonConverter(typeof(Serializer))]
public class JobResults : CouchDocument, ICanJson
{
    [JsonProperty("update-datetime")]
    public DateTime UpdateDateTime = new DateTime(1, 1, 1, 0, 0, 0);

    [JsonProperty("job-ids")]
    public JArray JobIDs = new JArray();
    ...
}

public class Serializer : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        ...
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        ...
    }

    public override bool CanConvert(Type objectType)
    {
        return typeof(JobResults).IsAssignableFrom(objectType);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

来自分类Dev

ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

来自分类Dev

Visual Studio中的.net核心可与控制台应用程序一起使用,但不适用于wpf或winforms

来自分类Dev

RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

来自分类Dev

jasmine.clock()。tick()不适用于$ timeout和去抖动,但可以与setTimeout一起使用

来自分类Dev

适用于Windows的GitHub和Visual Studio 2013-可以一起使用吗?

来自分类Dev

ASP.NET MVC - 路由适用于 /home 但不适用于 /home/index

来自分类Dev

使用JSON.NET库重写WriteJson

来自分类Dev

.Net - 程序集绑定不适用于 net461 中的 Newtonsoft

来自分类Dev

JSON.NET:JsonCreationConverter工作WriteJson实现

来自分类Dev

忘记密码不适用于.NET Core 3.x和React支架

来自分类Dev

授权属性不适用于IdentityServer4和.NET Core 3.1

来自分类Dev

webgl照明着色器与Firefox一起使用,但不适用于chrome

来自分类Dev

websocket与http模块一起使用,但不适用于express(node.js)

来自分类Dev

Coldfusion 11 REST Service与HTTP一起使用,但不适用于HTTPS(404)

来自分类Dev

元组可与nullptr一起使用,但不适用于NULL

来自分类Dev

React JS + React Router与$ .get一起使用,但不适用于$ .ajax PUT

来自分类Dev

队列与Azure存储(经典)一起使用,但不适用于现代存储

来自分类Dev

RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

来自分类Dev

RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

来自分类Dev

Django 项目使用 runserver 运行,但不适用于 Gunicorn 和 nginx

来自分类Dev

SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

来自分类Dev

“适用于GAE渠道的Java客户端”是否可与Android和iOS的libgdx一起使用?

来自分类Dev

jQuery touch Punch适用于Chrome和Firefox,但不适用于IE

来自分类Dev

Fullcalendar和Bootstrap:回调适用于.modal(),但不适用于.dropdown('toggle')

来自分类Dev

jQuery touch Punch适用于Chrome和Firefox,但不适用于IE

来自分类Dev

jQuery验证适用于类,但不适用于规则和消息

来自分类Dev

JS适用于Firefox和Safari,但不适用于Chrome。这是我的网站

来自分类Dev

适用于chrome,但不适用于Firefox,Eventlistener,appendChild和style.backgroundColor

Related 相关文章

  1. 1

    Newtonsoft JSON反序列化可在本地和实时环境中使用,但不适用于ASP.NET MVC应用程序的测试

  2. 2

    ASP.NET 5 Web应用程序可与web.cmd一起使用,但不适用于IIS应用程序

  3. 3

    Visual Studio中的.net核心可与控制台应用程序一起使用,但不适用于wpf或winforms

  4. 4

    RESTful API 请求适用于 Python 和浏览器,但不适用于 VB.Net

  5. 5

    jasmine.clock()。tick()不适用于$ timeout和去抖动,但可以与setTimeout一起使用

  6. 6

    适用于Windows的GitHub和Visual Studio 2013-可以一起使用吗?

  7. 7

    ASP.NET MVC - 路由适用于 /home 但不适用于 /home/index

  8. 8

    使用JSON.NET库重写WriteJson

  9. 9

    .Net - 程序集绑定不适用于 net461 中的 Newtonsoft

  10. 10

    JSON.NET:JsonCreationConverter工作WriteJson实现

  11. 11

    忘记密码不适用于.NET Core 3.x和React支架

  12. 12

    授权属性不适用于IdentityServer4和.NET Core 3.1

  13. 13

    webgl照明着色器与Firefox一起使用,但不适用于chrome

  14. 14

    websocket与http模块一起使用,但不适用于express(node.js)

  15. 15

    Coldfusion 11 REST Service与HTTP一起使用,但不适用于HTTPS(404)

  16. 16

    元组可与nullptr一起使用,但不适用于NULL

  17. 17

    React JS + React Router与$ .get一起使用,但不适用于$ .ajax PUT

  18. 18

    队列与Azure存储(经典)一起使用,但不适用于现代存储

  19. 19

    RegExp可在perl,javascript和Objective-c中使用,但不适用于Java

  20. 20

    RegExp可在Perl,JavaScript和Objective-C中使用,但不适用于Java

  21. 21

    Django 项目使用 runserver 运行,但不适用于 Gunicorn 和 nginx

  22. 22

    SQL查询可在SQL Server Management Studio中使用,但不适用于ASP.Net应用程序

  23. 23

    “适用于GAE渠道的Java客户端”是否可与Android和iOS的libgdx一起使用?

  24. 24

    jQuery touch Punch适用于Chrome和Firefox,但不适用于IE

  25. 25

    Fullcalendar和Bootstrap:回调适用于.modal(),但不适用于.dropdown('toggle')

  26. 26

    jQuery touch Punch适用于Chrome和Firefox,但不适用于IE

  27. 27

    jQuery验证适用于类,但不适用于规则和消息

  28. 28

    JS适用于Firefox和Safari,但不适用于Chrome。这是我的网站

  29. 29

    适用于chrome,但不适用于Firefox,Eventlistener,appendChild和style.backgroundColor

热门标签

归档