JsonFx

v2.0.0·Updated 2025-05-15

JSON serialization framework for.NET

About this mod Author’s original text

[JsonFx v2.0][1] - JSON serialization framework for.NET

Distributed under the terms of an [MIT-style license][2]

Compatible Runtimes:

-.NET Framework 2.0, 3.0, 3.5, and 4.0

  • Silverlight 3.0, 4.0
  • Windows Phone 7
  • Mono Framework 2.6

Serialization Features:

  • Unified interface for reading / writing [JSON][3], [BSON][4], XML, [JsonML][5]
  • Implements true LINQ-to-JSON (not simply LINQ-to-Objects over JSON types)
  • Naturally deserializes to standard CLR types, not JSON/XML-specific types
  • Supports reading/writing POCO classes
  • Supports reading/writing using DataContract, XmlSerialization, JsonName, attributes
  • Supports reading/writing using convention-based property renaming
  • Supports reading/writing C# 4.0 dynamic types
  • Supports reading/writing C# 3.0 Anonymous objects
  • Supports reading/writing LINQ queries
  • Supports custom reading/writing extensions & name resolution strategies
  • Dependency-injection-friendly for extremely flexible custom configurations
  • Stream-based serialization for reading/writing right off the wire
  • Provider allows automatic selection of serializer from Content-Type and Accept-Types HTTP headers

Basic Examples:

Serialize to/from dynamic types (default for.NET 4.0):

var reader = new JsonReader(); var writer = new JsonWriter();

string input = @"{ ""foo"": true, ""array"": [ 42, false, ""Hello!"", null ] }";

dynamic output = reader.Read(input);

Console.WriteLine(output.array[0]); // 42

string json = writer.Write(output);

Console.WriteLine(json); // {"foo":true,"array":[42,false,"Hello!",null]}

Serialize to/from standard CLR types (default for.NET 2.0/3.5):

string input = @"{ ""first"": ""Foo"", ""last"": ""Bar"" }";

var output = reader.Read>(input);

Console.WriteLine(output["first"]); // Foo

output["middle"] = "Blah";

string json = writer.Write(output);

Console.WriteLine(json); // {"first":"Foo","last":"Bar","middle":"Blah"}

Serialize to/from Anonymous types

string input = @"{ ""first"": ""Foo"", ""last"": ""Bar"" }";

var template = new { first=String.Empty, middle=String.Empty, last=String.Empty };

var output = reader.Read(input, template);

Console.WriteLine(output.first); // Foo

output = new { output.first, middle="Blah", output.last };

string json = writer.Write(output);

Console.WriteLine(json); // {"first":"Foo","middle":"Blah","last":"Bar"}

Serialize to/from custom types and LINQ queries

[DataContract]

public class Person

{

[DataMember(Name="id")] public long PersonID { get; set; }

[DataMember(Name="first")] public string FirstName { get; set; }

[DataMember(Name="last")] public string LastName { get; set; }

}

// respect DataContracts on the way in

var reader = new JsonReader(new DataReaderSettings(new DataContractResolverStrategy()));

// use convention over configuration on the way out

var writer = new JsonWriter(new DataWriterSettings(new ConventionResolverStrategy(ConventionResolverStrategy.WordCasing.Lowercase, "-")));

string input =

@"[

{ ""id"": 1, ""first"": ""Foo"", ""last"": ""Bar"" },

{ ""id"": 2, ""first"": ""etc."", ""last"": ""et al."" },

{ ""id"": 3, ""first"": ""Blah"", ""last"": ""Yada"" }

]";

var people = reader.Query(input);

var query =

from person in people.ArrayItems()

where person.PersonID == 1 || person.FirstName == "Blah"

orderby person.PersonID

select person;

Console.WriteLine(query.Last().LastName); // Yada

string json = writer.Write(query);

Console.WriteLine(json); // [{"person-id":1,"first-name":"Foo","last-name":"Bar"},{"person-id":3,"first-name":"Blah","last-name":"Yada"}]

Serialize to/from TCP socket:

TcpClient tcpClient = new TcpClient(server, port);

NetworkStream tcpStream = tcpClient.GetStream();

// read incrementally from incoming stream

TextReader tcpReader = new StreamReader(tcpStream);

Foo myFoo = new JsonReader.Read(tcpReader);

// write directly to output stream

TextWriter tcpWriter = new StreamWriter(tcpStream);

new JsonWriter.Write(myFoo, tcpWriter);

Fully customizable name resolution strate

Install & use Install: follow the bundled instructions

  1. Unzip the archive from playbuff and read the bundled readme / instructions first.
  2. Most mods rely on the game's mod loader — the usual route is a community mod manager (such as r2modman): pick this game, install, and it handles the loader and dependencies.
  3. For a manual install, put the mod files into the matching Mod / plugins folder inside the game directory.
  4. Launch the game to confirm it loaded; mods with listed dependencies need those installed as well.

Install locations vary a lot between mods — the bundled readme is the most reliable guide.

File & checksum

Filename
JsonFx-2.0.0.zip
File size
103.0 KiB