最近在做一个关于OPC项目,项目中把对象序列化成Json,使用了
Newtonsoft.Json
插件,当序列化byte数组时,发现byte[] 被序列化成一个字符串,在浏览官方文档时,发现可以针对特定类型写相应的转换器。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
namespace ConsoleApp2
internal class Program
private static void Main(string[] args)
var data = new Demo {Data = new byte[] {1, 3, 4}};
var error = JsonConvert.SerializeObject(data);
Console.Write("error json:");
ShowError(error);
Console.WriteLine();
var setting = new JsonSerializerSettings
Converters = new List<JsonConverter>
new JsonByteArrayConverter()
var json = JsonConvert.SerializeObject(data, setting);
Console.WriteLine($"correct json:{json}");
Console.ReadKey();
private static void ShowError(string input)
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(input);
Console.ForegroundColor = ConsoleColor.White;
internal class Demo
[JsonProperty("data")]
public byte[] Data { get; set; }
public class JsonByteArrayConverter : JsonConverter
/// <summary>
/// 写入Json数据
/// </summary>
/// <param name="writer"></param>
/// <param name="value"></param>
/// <param name="serializer"></param>
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var result = new StringBuilder();
if (value is byte[] temp)
foreach (var item in temp)
result.AppendFormat("{0},", item);
writer.WriteValue($"[{result.ToString().Trim(',')}]");
/// <summary>
/// 读Json数据
/// </summary>
/// <param name="reader"></param>
/// <param name="objectType"></param>
/// <param name="existingValue"></param>
/// <param name="serializer"></param>
/// <returns></returns>
public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
var strValue = reader.Value.ToString();
var temp = strValue.Split(',');
return temp.Select(x => byte.Parse(x)).ToArray();
/// <summary>
/// 是否可以转换
/// </summary>
/// <param name="objectType"></param>
/// <returns></returns>
public override bool CanConvert(Type objectType)
return objectType == typeof(byte[]);
场景最近在做一个关于OPC项目,项目中把对象序列化成Json,使用了Newtonsoft.Json插件,当序列化byte数组时,发现byte[] 被序列化成一个字符串,在浏览官方文档时,发现可以针对特定类型写相应的转换器。解决方案using System;using System.Collections.Generic;using System.Linq;using System.T...
Newtonsoft.Json的Unity转换器
该软件包包含往返于常见Unity类型的转换器。 类型,例如Vector2,Vector3,Matrix4x4,四元数,颜色,甚至ScriptableObject等等。 (请参阅的)
Newtonsoft.Json软件包
此程序包需要在项目中包含Newtonsoft.Json.dll文件。 因此,它不必与我的jillejr.newtonsoft.json-for-unity软件包一起使用! 我认识到Unity生态系统中有太多的Newtonsoft.Json分支和变体。
该软件包可以与以下任何一项结合使用:
我自己的JamesNK原始牛顿软件的分支.Json回购: (推荐)
SaladLab的叉子:
ParentElement的资产商店软件包: ://www.parentelement.com/assets/json_
static JsonHelper()
Newtonsoft.Json.JsonSerializerSettings setting = new Newtonsoft.Json.JsonSerializerSettings();
在c#中,一般json序列化使用Newtonsoft.Json包,使用方法如下:
//序列化
var json = Newtonsoft.Json.JsonConvert.Serialize(new { Id = 1, Name = "小明" });
//反序列化
var person = Newtonsoft.Json.JsonConvert.DeSerialize<Person>(json);
class Person
public int
Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。
让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换.
官网上三种不同的组件性能对比
/*********************...
class test { public string a; public int b; public byte[] c; public IntPtr d; }
把上面对象序列化成string并保存。
test t=new test() { a = "aa", b = 444, c = new byte[] { 2, 1...
使用JsonConvert.SerializeObject时提示Self referencing loop detected for property问题描述问题状态解决方法
在使用JsonConvert.SerializeObject时出错 try catch 捕捉到Self referencing loop detected for property错误。
解决...
Self referencing loop detected for property 'xxxx' with type 'System.Data.Entity.DynamicProxies.XXX_XXX'.
Newtonsoft.
Json.
JsonSerializationException
JsonConvert.SerializeObject(arg, Formatting.None, new
JsonSerializerSettings()
public class Demo
Json :
JsonConverter
private void dumpNumArray<T>(
JsonWriter writer, T n)
C# Newtonsoft.Json.JsonConvert.SerializeObject() 参数Newtonsoft.Json.Formatting.Indented与不带参数的区别。
Newtonsoft.Json.JsonConvert.SerializeObject()这个函数放回一个JSON字符串。
默认的,参数是None,如果加了Newtonsoft.Json.Formatting.Indented,会返回标准的格式化后的JSON字符串。
写了个小Demo测试了一携带参数和不带参数的区别.
在VS2008下使用Newtonsoft.Json进行JSON的序列化与反序列化可以按照以下步骤进行:
1. 在项目中添加Newtonsoft.Json的引用,可以通过NuGet包管理器安装Newtonsoft.Json。
2. 创建需要序列化的对象,并使用JsonConvert.SerializeObject方法将对象序列化为JSON字符串。
Person person = new Person
Name = "Tom",
Age = 30
string json = JsonConvert.SerializeObject(person);
3. 将JSON字符串反序列化为对象,可以使用JsonConvert.DeserializeObject方法。
string json = "{\"Name\":\"Tom\",\"Age\":30}";
Person person = JsonConvert.DeserializeObject<Person>(json);
其中,Person是需要反序列化的对象类型。
注意:在使用Newtonsoft.Json时,需要使用Newtonsoft.Json命名空间。