Перейти к содержимому

JSON to C# Class

Преобразуйте JSON в определения классов C# POCO с атрибутами свойств, аннотациями данных и атрибутами Newtonsoft.

Об этом инструменте

JSON to C# Class — это инструмент для разработчиков, который автоматически преобразует структуры данных JSON в определения классов C# POCO (Plain Old CLR Object). При работе с API, файлами конфигурации или внешними источниками данных в приложениях .NET наличие строго типизированных классов C# обеспечивает безопасность типов и включает автодополнение IntelliSense в Visual Studio. Этот инструмент исключает утомительную ручную работу по определению классов путём анализа вашего JSON и генерирования готового к производству кода C#.

Просто вставьте объект JSON в поле ввода и нажмите кнопку преобразования. Инструмент анализирует структуру, определяет типы данных, обрабатывает вложенные объекты и массивы, и генерирует классы C# с соответствующими типами свойств, атрибутами Newtonsoft.Json для сериализации и дополнительными аннотациями nullable. Созданный код можно сразу же скопировать в ваш проект .NET и использовать с популярными библиотеками JSON, такими как Newtonsoft.Json (Json.NET) или System.Text.Json.

Это особенно полезно для разработчиков, интегрирующих REST API, обрабатывающих файлы конфигурации или десериализующих ответы API на C#. Созданный код поддерживает вложенные объекты, необязательные свойства и пользовательские сопоставления атрибутов, обеспечивая совместимость с версиями framework и современными приложениями .NET.

Часто задаваемые вопросы

Реализация кода

import json
from typing import Any

def to_pascal_case(s: str) -> str:
    return ''.join(w.capitalize() for w in s.replace('-', '_').split('_'))

def cs_type(value: Any, key: str) -> str:
    if isinstance(value, bool):
        return "bool"
    if isinstance(value, int):
        return "int"
    if isinstance(value, float):
        return "double"
    if isinstance(value, str):
        return "string"
    if isinstance(value, list):
        if value:
            return f"List<{cs_type(value[0], key)}>"
        return "List<object>"
    if isinstance(value, dict):
        return to_pascal_case(key)
    return "object"

def generate_classes(data: dict, class_name: str, classes: list) -> None:
    props = []
    for k, v in data.items():
        prop_name = to_pascal_case(k)
        type_str = cs_type(v, k)
        if type_str == "string":
            type_str = "string?"
        props.append(f'    [JsonProperty("{k}")]')
        props.append(f'    public {type_str} {prop_name} {{ get; set; }}')
        if isinstance(v, dict):
            generate_classes(v, prop_name, classes)
    classes.append(f"public class {class_name}\n{{\n" + "\n".join(props) + "\n}")

json_str = '{"name": "Alice", "age": 30, "active": true}'
data = json.loads(json_str)
classes = []
generate_classes(data, "Root", classes)
print("\n\n".join(classes))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.