Json 转 proto
时间: 2024-02-09 22:10:58 浏览: 149
Js构造函数及Json格式的字符串转对象等
将 JSON 转换为 proto 数据,需要先将 JSON 字符串解析成对应的数据结构,然后将数据结构转换为 proto 数据。一般来说,可以使用第三方库来实现这一过程,比如 Google 提供的 protobuf-net 库。
以下是一个简单的示例代码,演示了如何将 JSON 转换为 proto 数据:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Google.Protobuf;
using ProtoBuf;
public class JsonToProto : MonoBehaviour
{
void Start()
{
// 定义一个 JSON 字符串
var json = @"
{
""id"": 1,
""name"": ""JsonToProto"",
""values"": [1, 2, 3]
}";
// 将 JSON 字符串解析成对应的数据结构
var data = JsonUtility.FromJson<MyData>(json);
// 将数据结构转换为 proto 数据
var msg = new MyMessage
{
Id = data.id,
Name = data.name,
Values = { data.values }
};
// 将 proto 数据序列化成二进制数据
byte[] bytes;
using (var stream = new System.IO.MemoryStream())
{
Serializer.Serialize(stream, msg);
bytes = stream.ToArray();
}
// 将二进制数据反序列化成 proto 数据
MyMessage newMsg;
using (var stream = new System.IO.MemoryStream(bytes))
{
newMsg = Serializer.Deserialize<MyMessage>(stream);
}
// 输出 proto 数据的内容
Debug.Log($"Id: {newMsg.Id}, Name: {newMsg.Name}, Values: {string.Join(", ", newMsg.Values)}");
}
// 定义一个数据结构用于存储 JSON 数据
[System.Serializable]
public class MyData
{
public int id;
public string name;
public int[] values;
}
// 定义一个 proto 数据结构
[ProtoContract]
public class MyMessage
{
[ProtoMember(1)]
public int Id { get; set; }
[ProtoMember(2)]
public string Name { get; set; }
[ProtoMember(3)]
public List<int> Values { get; set; } = new List<int>();
}
}
```
注意:在使用第三方库转换 JSON 和 proto 数据时,需要保证数据结构和字段名称一致,否则可能会出现序列化和反序列化的问题。
阅读全文