我正在從二進制文件中讀取數(shù)據(jù),目的是將其轉換為 xml。為此,我有一個定義了所有封送處理的類來閱讀它。文本值是 32 字節(jié)的固定長度字符串 - 在 ANSI 韓國代碼頁中。我使用 XmlSerializer Serialize() 將其保存為 xml。 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] pName;但是 XmlSerializer 僅支持帶有 byte[] 的 base64/hex。我不能使用UnmanagedType.ByValTStr因為它不允許指定代碼頁,而且我得到了不正確、損壞的字符串,例如:μe?ú??o§?ó??32àúà?°?1如何讓數(shù)據(jù)作為 EUC-KR 字符串讀取或為這些特定的 32 字節(jié)數(shù)組提供自定義序列化以自己將其轉換為可讀格式?我總共處理了大約 20 個文件,每個文件都有不同的結構 - 但使用相同的 32 字節(jié)字符串作為文本。因此,手動轉換和循環(huán)遍歷具有各種類結構的嵌套數(shù)據(jù)不是一個可行的選擇。更新:示例結構: [StructLayout(LayoutKind.Sequential)] public struct ClientData { [MarshalAs(UnmanagedType.U4)] public uint index; [MarshalAs(UnmanagedType.U4)] public uint serial; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string pName; public string StrName { get { return System.Text.Encoding.GetEncoding("EUC-KR").GetString(pName, 0, 32); } } }
1 回答

蠱毒傳說
TA貢獻1895條經(jīng)驗 獲得超3個贊
根據(jù)我寫的評論,使用類似的東西:
public class MyClass
{
private static readonly Encoding koreanEncoding = Encoding.GetEncoding("EUC-KR");
[XmlIgnore]
public byte[] pName;
public string pNameString
{
get => koreanEncoding.GetString(pName).TrimEnd('\0');
set
{
var temp = koreanEncoding.GetBytes(value);
Array.Resize(ref temp, 32);
pName = temp;
}
}
}
因此,創(chuàng)建一個代理pNameString來轉換pName并用于[XmlIgnore]將其從 xml 中刪除。XmlSerializer 可能需要將屬性中的aget和 aset序列化。
- 1 回答
- 0 關注
- 288 瀏覽
添加回答
舉報
0/150
提交
取消