使用NewtonSoft Json序列化/反序列化byte []

时间:2014-08-25 05:56:19

标签: c# json.net

我遇到了Json的问题。它将字节数组序列化为base64编码的字符串,例如,

"UpdateSeq":{"$type":"System.Byte[], mscorlib","$value":"AAAAAAAJHxw="},

但是在反序列化字符串时它会忽略base64编码的字符串。我得到一个字节数组,但它只是AAA等转换为字节数组。如果没有解码base64编码的字符串。

1 个答案:

答案 0 :(得分:1)

以下测试代码适用于我使用Json.Net 6.0.4。

using System;
using System.Text;
using Newtonsoft.Json;

namespace JsonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Testing";

            Foo foo = new Foo
            {
                UpdateSeq = Encoding.UTF8.GetBytes(str)
            };

            JsonSerializerSettings settings = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Objects,
                Formatting = Formatting.Indented
            };

            string json = JsonConvert.SerializeObject(foo, settings);
            Console.WriteLine(json);

            Foo foo2 = JsonConvert.DeserializeObject<Foo>(json, settings);
            string str2 = Encoding.UTF8.GetString(foo2.UpdateSeq);
            Console.WriteLine();
            Console.WriteLine(str == str2 
                              ? "strings are equal" 
                              : "strings are NOT equal");
        }
    }

    public class Foo
    {
        public byte[] UpdateSeq { get; set; }
    }
}

输出:

{
  "$type": "JsonTest.Foo, JsonTest",
  "UpdateSeq": {
    "$type": "System.Byte[], mscorlib",
    "$value": "VGVzdGluZw=="
  }
}

strings are equal