Skip to content

architects-toolkit/ghjson-dotnet

Repository files navigation

GhJSON.NET

Package Version Schema Version License

.NET implementation of the GhJSON specification for Grasshopper definition serialization.

Overview

GhJSON is a JSON-based format for representing Grasshopper definitions. This library provides:

  • GhJSON.Core — Platform-independent document model and operations (read, write, validate, fix, merge, migrate)
  • GhJSON.Grasshopper — Grasshopper integration (serialize from canvas, place on canvas, data type serializers, object handlers)

Documentation

See the documentation index for detailed guides and architecture.

Installation

# Core library (platform-independent)
dotnet add package GhJSON.Core

# Grasshopper integration (requires Rhino 8+)
dotnet add package GhJSON.Grasshopper

Quick Start

Serialization (Grasshopper Canvas → GhJSON)

using GhJSON.Core;
using GhJSON.Grasshopper;

// Serialize all objects from the active canvas
var document = GhJsonGrasshopper.Get();
string json = GhJson.ToJson(document);

// Or serialize only selected objects
var selected = GhJsonGrasshopper.GetSelected();

Deserialization (GhJSON → Grasshopper Canvas)

using GhJSON.Core;
using GhJSON.Grasshopper;

// Parse JSON and place on the active canvas
var document = GhJson.FromJson(json);
var result = GhJsonGrasshopper.Put(document);

Validation

using GhJSON.Core;

var result = GhJson.Validate(json);
if (!result.IsValid)
{
    foreach (var error in result.Errors)
    {
        Console.WriteLine(error.Message);
    }
}

// Or quick check
bool isValid = GhJson.IsValid(json);

Building Documents Programmatically

using GhJSON.Core;
using GhJSON.Core.SchemaModels;

var slider = new GhJsonComponent
{
    Name = "Number Slider",
    Id = 1,
    Pivot = new GhJsonPivot(100, 100),
};

var doc = GhJson.CreateDocumentBuilder()
    .AddComponent(slider)
    .Build();

GhJSON Format

See the GhJSON Specification or the ghjson-spec repo for the complete format definition.

Example

{
  "schema": "1.0",
  "components": [
    {
      "name": "Number Slider",
      "componentGuid": "57da07bd-ecab-415d-9d86-af36d7073abc",
      "instanceGuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "id": 1,
      "pivot": "100,200",
      "componentState": {
        "extensions": {
          "gh.numberslider": {
            "value": "5<0~10>"
          }
        }
      }
    }
  ],
  "connections": []
}

License

Apache-2.0

Contributing

See CONTRIBUTING.md for guidelines.

Related Projects

About

.NET implementation for the GhJSON format

Resources

License

Contributing

Stars

Watchers

Forks

Contributors