添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近在做一个关于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 DemoJson : JsonConverter private void dumpNumArray&lt;T&gt;(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命名空间。