簡體   English   中英

將字典或列表轉換為字節[]

[英]convert dictionary or list to byte[]

好的,我在這里和統一論壇上都看到了許多類似的問題,詢問有關從一種格式轉換為另一種格式的問題。 我有一個(希望如此)簡單的問題,但我找不到答案。 我正在使用 Prime31 的游戲中心插件來處理回合制多人游戲。 在 Prime31 的插件中,他們要求您提供一個 byte[] 以發送給其他玩家。 (狀態數據)所以問題是,將 List 轉換為字節數組然后將它們從字節數組轉換回來的好方法是什么?

作為參考,這是我需要的復雜類,稍后我可能需要添加更多成員,但不是任何不同的類型。 如果這樣可以更輕松地將 PokerPlayers 列表轉換為 byte[],那么 int 的列表(手中的牌)很容易成為 4 個單獨的 int。 同樣在此列表中不是固定長度,而是始終為 4-8。

public class PokerPlayer{   
    public string playerID;
    public string alias;
    public int wildCard;
    public List<int> cardsInHand;
    public int chips;   
}

我覺得當我看到答案時,我會因為沒有早點看到答案而自責。 任何指向相關材料的指針/鏈接都會很好,我已經用類似(非常相似)但不完全相同的問題在谷歌上搜索了 3 個小時。

您可能想嘗試序列化。

var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, myObjToSerialize);

//This gives you the byte array.
mStream.ToArray();

然后如果你想把字節數組轉回一個對象:

var mStream = new MemoryStream();
var binFormatter = new BinaryFormatter();

// Where 'objectBytes' is your byte array.
mStream.Write (objectBytes, 0, objectBytes.Length);
mStream.Position = 0;

var myObject = binFormatter.Deserialize(mStream) as YourObjectType;

BinaryFormatter現在存在安全風險。 如果我找到一個不使用它的好方法,我會回來的

https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/binaryformatter-serialization-obsolete

編輯:這仍然是 Google 中的最高結果,所以我將展示我為擺脫BinaryFormatter所做的工作

你需要 Newtonsoft.Json

public static class ExtendedSerializerExtensions
{
    private static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.Auto,
    };

    public static byte[] Serialize<T>(this T source)
    {
        var asString = JsonConvert.SerializeObject(source, SerializerSettings);
        return Encoding.Unicode.GetBytes(asString);
    }

    public static T Deserialize<T>(this byte[] source)
    {
        var asString = Encoding.Unicode.GetString(source);
        return JsonConvert.DeserializeObject<T>(asString);
    }
}

如果您需要一個流而不是一個字節數組,那么離這里不遠了

將數據轉換為字節流(並返回)稱為serialization (和反serialization )。

您可以使用BinaryFormatter類來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM