Zero Configuration Required

Transform Complex Data Into
Friendly C# Objects

The magical data extractor for .NET that makes working with XML, JSON, CSV, and HTML a breeze. No tedious model creation. No parsing headaches. Just pure productivity.

NuGet Version
NuGet Downloads
GitHub Stars
Program.cs
// Install: dotnet add package WebSpark.Slurper

var factory = new SlurperFactory();
var extractor = factory.CreateXmlExtractor();

string xml = @"
<book id=""bk101"">
  <author>Gambardella, Matthew</author>
  <title>XML Developer Guide</title>
  <price>44.95</price>
</book>";

var book = extractor.Extract(xml).First();

// Access data with dynamic properties - no model needed!
Console.WriteLine($"Title: {book.title}");
Console.WriteLine($"Author: {book.author}");
Console.WriteLine($"Price: ${book.price}");

Why Developers Love Slurper

A comprehensive toolkit for data extraction with enterprise-grade features

Multiple Data Formats

Extract data from XML, JSON, CSV, and HTML with a unified, consistent API.

Dynamic Objects

Access extracted data using dynamic properties without defining model classes.

Zero Configuration

Start extracting data immediately with sensible defaults and no setup required.

Async Support

All extraction methods have asynchronous versions for non-blocking operations.

Dependency Injection

Full integration with .NET DI container for clean architecture.

Extensible

Plugin system allows you to add custom data extractors for any format.

High Performance

Streaming, parallel processing, and caching options for optimal performance.

Error Handling

Comprehensive exception types with detailed messages for easy debugging.

Serialization

Easily serialize extracted data back to JSON with envelope support.

Get Started in Minutes

Three simple steps to start extracting data

1

Install the Package

Add WebSpark.Slurper to your project using the .NET CLI or Package Manager.

dotnet add package WebSpark.Slurper
2

Create an Extractor

Use the factory to create an extractor for your data format.

var factory = new SlurperFactory();
var extractor = factory.CreateJsonExtractor();
3

Extract Data

Extract from strings, files, or URLs and access data dynamically.

var data = extractor.Extract(jsonString);
Console.WriteLine(data.First().propertyName);

Powerful Examples

See how Slurper handles different data formats with ease

XmlExample.cs
// Create factory and extractor
var factory = new SlurperFactory();
var xmlExtractor = factory.CreateXmlExtractor();

// Extract from string
string xml = @"
<catalog>
  <book id=""bk101"">
    <author>Gambardella, Matthew</author>
    <title>XML Developer Guide</title>
    <price>44.95</price>
  </book>
  <book id=""bk102"">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <price>5.95</price>
  </book>
</catalog>";

var catalog = xmlExtractor.Extract(xml).First();

// Access data dynamically - bookList is created automatically!
foreach (var book in catalog.bookList)
{
    Console.WriteLine($"Title: {book.title}");
    Console.WriteLine($"Author: {book.author}");
    Console.WriteLine($"Price: ${book.price}");
    Console.WriteLine($"ID: {book.id}"); // Attributes too!
    Console.WriteLine();
}

// Extract from file or URL
var booksFromFile = xmlExtractor.ExtractFromFile("books.xml");
var booksFromUrl = await xmlExtractor.ExtractFromUrlAsync("https://api.example.com/books.xml");
JsonExample.cs
// Create factory and extractor
var factory = new SlurperFactory();
var jsonExtractor = factory.CreateJsonExtractor();

// Extract from JSON string
string json = @"{
  ""users"": [
    {
      ""id"": 1,
      ""name"": ""John Doe"",
      ""email"": ""john@example.com"",
      ""active"": true
    },
    {
      ""id"": 2,
      ""name"": ""Jane Smith"",
      ""email"": ""jane@example.com"",
      ""active"": false
    }
  ]
}";

var data = jsonExtractor.Extract(json).First();

// Navigate nested structures naturally
foreach (var user in data.users.usersList)
{
    Console.WriteLine($"User #{user.id}: {user.name}");
    Console.WriteLine($"Email: {user.email}");
    Console.WriteLine($"Status: {(user.active ? ""Active"" : ""Inactive"")}");
    Console.WriteLine();
}

// Serialize back to JSON
string outputJson = data.ToJson(indented: true);

// Create envelope with metadata
var metadata = new Dictionary<string, object>
{
    { ""timestamp"", DateTime.UtcNow },
    { ""version"", ""1.0"" }
};
string envelope = data.ToJsonEnvelope(""response"", metadata, indented: true);
CsvExample.cs
// Create factory and extractor
var factory = new SlurperFactory();
var csvExtractor = factory.CreateCsvExtractor();

// Extract from CSV string
string csv = @"id,name,department,salary
101,John Doe,Engineering,95000
102,Jane Smith,Marketing,87000
103,Bob Johnson,Engineering,92000
104,Alice Williams,Sales,78000";

var employees = csvExtractor.Extract(csv);

// Access CSV data as dynamic objects
foreach (var employee in employees)
{
    Console.WriteLine($"ID: {employee.id}");
    Console.WriteLine($"Name: {employee.name}");
    Console.WriteLine($"Department: {employee.department}");
    Console.WriteLine($"Salary: ${employee.salary:N0}");
    Console.WriteLine();
}

// Extract from file
var employeesFromFile = csvExtractor.ExtractFromFile("employees.csv");

// Extract from URL
var employeesFromUrl = await csvExtractor.ExtractFromUrlAsync(
    "https://example.com/data/employees.csv"
);
HtmlExample.cs
// Create factory and extractor
var factory = new SlurperFactory();
var htmlExtractor = factory.CreateHtmlExtractor();

// Extract from HTML string
string html = @"
<html>
  <body>
    <article class=""product"">
      <h1>Wireless Headphones</h1>
      <p class=""price"">$129.99</p>
      <div class=""description"">
        Premium sound quality with noise cancellation
      </div>
    </article>
  </body>
</html>";

var page = htmlExtractor.Extract(html).First();

// Navigate HTML structure
Console.WriteLine($"Product: {page.html.body.article.h1}");
Console.WriteLine($"Price: {page.html.body.article.p}");
Console.WriteLine($"Description: {page.html.body.article.div}");

// Extract from URL
var webPage = await htmlExtractor.ExtractFromUrlAsync("https://example.com/product");

// Perfect for web scraping
Console.WriteLine($"Title: {webPage.First().html.body.h1}");
DependencyInjection.cs
// In Program.cs or Startup.cs
using WebSpark.Slurper.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Register all Slurper services
builder.Services.AddSlurper();

var app = builder.Build();

// In your service class
public class DataService
{
    private readonly IXmlExtractor _xmlExtractor;
    private readonly IJsonExtractor _jsonExtractor;
    private readonly ICsvExtractor _csvExtractor;
    private readonly IHttpClientService _httpClient;
    private readonly ILogger<DataService> _logger;
    
    public DataService(
        IXmlExtractor xmlExtractor,
        IJsonExtractor jsonExtractor,
        ICsvExtractor csvExtractor,
        IHttpClientService httpClient,
        ILogger<DataService> logger)
    {
        _xmlExtractor = xmlExtractor;
        _jsonExtractor = jsonExtractor;
        _csvExtractor = csvExtractor;
        _httpClient = httpClient;
        _logger = logger;
    }
    
    public async Task<IEnumerable<dynamic>> GetProductsAsync(string url, string format)
    {
        _logger.LogInformation($"Fetching products from {url} in {format} format");
        
        return format.ToLower() switch
        {
            "xml" => await _xmlExtractor.ExtractFromUrlAsync(url),
            "json" => await _jsonExtractor.ExtractFromUrlAsync(url),
            "csv" => await _csvExtractor.ExtractFromUrlAsync(url),
            _ => throw new NotSupportedException($"Format {format} not supported")
        };
    }
}

Version History

Track the evolution of WebSpark.Slurper

Version 3.3.0

Current November 2025
  • Added .NET 10.0 support
  • Multi-framework targeting (net8.0, net9.0, net10.0)
  • Performance optimizations
  • Enhanced security features

Version 3.1.1

April 2025
  • Initial public release
  • XML, JSON, CSV, and HTML extraction
  • Factory pattern implementation
  • Dependency injection support
  • Plugin system architecture

Version 2.x

2024
  • Legacy version with static API
  • Basic XML and JSON support

Framework Support

.NET 8.0
.NET 9.0
.NET 10.0
Blazor
MAUI
.NET Framework

Documentation & Resources

Everything you need to master WebSpark.Slurper

Ready to Transform Your Data?

Join thousands of developers who are already using WebSpark.Slurper to simplify their data extraction.