Как реализовать пользовательский JsonConverter .NET для сериализации и десериализации объекта для FireStore - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать собственный конвертер json для объекта с вложенными объектами, чтобы отправить его как тело в REST API Firestore:

public class Channel
{
    public string Name { get; private set; }
    public long OwnerId { get; private set; }
    public IEnumerable<Message> Messages { get; set; }
    public IEnumerable<User> Users { get; set; }
}

public class User
{
    public string UserId{ get; private set; }
    public string Pseudonym { get; private set; }
}

public class Message
{
    public long SenderUserId { get; private set; }
    public string text { get; private set; }
    public DateTime SentDate { get; private set; }
}

При сериализации структура json должна выглядеть следующим образом:

{
        "OwnerId": {
            "stringValue": "id-1"
        },
        "Name": {
            "stringValue": "New Channel"
        },
        "Messages": {
            "arrayValue": {
                "values": [
                    {
                        "mapValue": {
                            "fields": {
                                "ConversationMessage": {
                                    "stringValue": "Hello kev"
                                },
                                "SenderUserId": {
                                    "stringValue": "id-1"
                                }
                            }
                        }
                    }
                ]
            }
        },
        "Users": {
            "arrayValue": {
                "values": [
                    {
                        "mapValue": {
                            "fields": {
                                "UserId": {
                                    "stringValue": "id-1"
                                },
                                "Pseudonym": {
                                    "stringValue": "raven"
                                }
                            }
                        }
                    },
                    {
                        "mapValue": {
                            "fields": {
                                "UserId": {
                                    "stringValue": "id-2"
                                },
                                "Pseudonym": {
                                    "stringValue": "kev"
                                }
                            }
                        }
                    }
                ]
            }
        }
    }

Firestore налагает эту структуру, свойство становится объектом с типом в качестве ключа и значением в качестве значения (строка становится stringValue, IEnumerable становится arrayValue со значениями, объект становится mapValue с полями ...)

Должен ли я создать конвертер для объекта или только один конвертер для объекта Channel? Любые ответы или помощь будут очень признательны, спасибо!

...