配置库
Json 是一种非常简练的数据交换格式。因此,将程序中的数据处理成JSON格式时需要仔细考虑你的数据中可能超出json规范的一些细节。
例如,从json字符串中读取数据时,单引号往往被用来划分字符串,而js风格的注释也是一种文档风格。这些都是常被开发者使用,但不标准的JSON数据格式。因此视具体情况你可能会对这种不规范表示谅解或要求苛刻。再如,要是你想将一个.net的对象转成json字符串并很好输出出来(通过使用缩进)会怎么样呢?
为了声明你需要的行为,你可能需要改变JsonReader 和 JsonWriter的一些属性。
JsonReader的配置
using LitJson;
using System;
public class JsonReaderConfigExample
{
public static void Main()
{
string json;
json = " /* these are some numbers */ [ 2, 3, 5, 7, 11 ] ";
TestReadingArray(json);
json = " [ \"hello\", 'world' ] ";
TestReadingArray(json);
}
static void TestReadingArray(string json_array)
{
JsonReader defaultReader, customReader;
defaultReader = new JsonReader(json_array);
customReader = new JsonReader(json_array);
customReader.AllowComments = false;
customReader.AllowSingleQuotedStrings = false;
ReadArray(defaultReader);
ReadArray(customReader);
}
static void ReadArray(JsonReader reader)
{
Console.WriteLine("Reading an array");
try {
JsonData data = JsonMapper.ToObject(reader);
foreach (JsonData elem in data)
Console.Write(" {0}", elem);
Console.WriteLine(" [end]");
}
catch (Exception e) {
Console.WriteLine(" Exception caught: {0}", e.Message);
}
}
}
输出可能为:
Reading an array
2 3 5 7 11 [end]
Reading an array
Exception caught: Invalid character '/' in input string
Reading an array
hello world [end]
Reading an array
Exception caught: Invalid character ''' in input string
JsonWriter的配置
using LitJson;
using System;
public enum AnimalType
{
Dog,
Cat,
Parrot
}
public class Animal
{
public string Name { get; set; }
public AnimalType Type { get; set; }
public int Age { get; set; }
public string[] Toys { get; set; }
}
public class JsonWriterConfigExample
{
public static void Main()
{
var dog = new Animal {
Name = "Noam Chompsky",
Type = AnimalType.Dog,
Age = 3,
Toys = new string[] { "rubber bone", "tennis ball" }
};
var cat = new Animal {
Name = "Colonel Meow",
Type = AnimalType.Cat,
Age = 5,
Toys = new string[] { "cardboard box" }
};
TestWritingAnimal(dog);
TestWritingAnimal(cat, 2);
}
static void TestWritingAnimal(Animal pet, int indentLevel = 0)
{
Console.WriteLine("\nConverting {0}'s data into JSON..", pet.Name);
JsonWriter writer1 = new JsonWriter(Console.Out);
JsonWriter writer2 = new JsonWriter(Console.Out);
writer2.PrettyPrint = true;
if (indentLevel != 0)
writer2.IndentValue = indentLevel;
Console.WriteLine("Default JSON string:");
JsonMapper.ToJson(pet, writer1);
Console.Write("\nPretty-printed:");
JsonMapper.ToJson(pet, writer2);
Console.WriteLine("");
}
}
上述例子输出为:
Converting Noam Chompsky's data into JSON..
Default JSON string:
{"Name":"Noam Chompsky","Type":0,"Age":3,"Toys":["rubber bone","tennis ball"]}
Pretty-printed:
{
"Name" : "Noam Chompsky",
"Type" : 0,
"Age" : 3,
"Toys" : [
"rubber bone",
"tennis ball"
]
}
Converting Colonel Meow's data into JSON..
Default JSON string:
{"Name":"Colonel Meow","Type":1,"Age":5,"Toys":["cardboard box"]}
Pretty-printed:
{
"Name" : "Colonel Meow",
"Type" : 1,
"Age" : 5,
"Toys" : [
"cardboard box"
]
}