C#反序列化对象
C# Deserialize Object
我的服务器上有一个网络套接字,该套接字 return 播放器信息列表到所有客户端。在我从 websocket 获取数据后,我无法反序列化我的数据,因为 c# 在我的数据中添加了一些“”字符。我无法删除这些字符
"\"[{\\"Id\\":\\"\\",\\"Location\\":{\\"X\\":60.0,\\"Y\\":60.0,\\"Z\\":10.0},\\"Rotation\\":{\\"X\\":10.0,\\"Y\\":10.0,\\"Z\\":10.0},\\"State\\":\\"walk\\",\\"IsAttacking\\":false,\\"PlayerName\\":\\"Sadooo\\",\\"Health\\":100,\\"LastSync\\":637598981481744771}]\""
我的 Json 字符串在调试模式下看起来像这样。我怎样才能清除这个字符串并反序列化。
我的项目 class 中有这个 属性 名称,一切正常我只需要去掉数据开头和结尾的 \ 字符和 " 字符。
public class PlayerInfo
{
//public string IpAdress { get; set; }
public string Id { get; set; }
public MyVector Location { get; set; }
public MyVector Rotation { get; set; }
public string State { get; set; }
public bool IsAttacking { get; set; }
public string PlayerName { get; set; }
public int Health { get; set; }
public long LastSync { get; set; }
}
public class MyVector
{
public float X { get; set; }
public float Y { get; set; }
public float Z { get; set; }
}
这是我的 class
JsonConvert.SerializeObject(myList);//This is how i serilaized to my data. After that I convert this string to byte array and send to the socket.
在客户端
我从套接字获取字节数组并像这样转换字符串
var data=Encoding.UTF8.GetString(result.Buffer);
比这样反序列化
var players= JsonConvert.DeserializeObject<List<PlayerInfo>>(data,new JsonSerializerSettings { NullValueHandling=NullValueHandling.Ignore});
这是文本可视化工具中的数据
感谢您的帮助。
它显然看起来像多级序列化,看起来你正在将对象序列化为 json 字符串,然后再将它传递给 websocket 库,在那里它被序列化为字符串。
在这种情况下,尝试多级反序列化或删除不必要的序列化。
试试这个:
var players= JsonConvert.DeserializeObject<List<PlayerInfo>>(
JsonConvert.DeserializeObject<string>(data),
new JsonSerializerSettings { NullValueHandling=NullValueHandling.Ignore});
我的服务器上有一个网络套接字,该套接字 return 播放器信息列表到所有客户端。在我从 websocket 获取数据后,我无法反序列化我的数据,因为 c# 在我的数据中添加了一些“”字符。我无法删除这些字符
"\"[{\\"Id\\":\\"\\",\\"Location\\":{\\"X\\":60.0,\\"Y\\":60.0,\\"Z\\":10.0},\\"Rotation\\":{\\"X\\":10.0,\\"Y\\":10.0,\\"Z\\":10.0},\\"State\\":\\"walk\\",\\"IsAttacking\\":false,\\"PlayerName\\":\\"Sadooo\\",\\"Health\\":100,\\"LastSync\\":637598981481744771}]\""
我的 Json 字符串在调试模式下看起来像这样。我怎样才能清除这个字符串并反序列化。 我的项目 class 中有这个 属性 名称,一切正常我只需要去掉数据开头和结尾的 \ 字符和 " 字符。
public class PlayerInfo
{
//public string IpAdress { get; set; }
public string Id { get; set; }
public MyVector Location { get; set; }
public MyVector Rotation { get; set; }
public string State { get; set; }
public bool IsAttacking { get; set; }
public string PlayerName { get; set; }
public int Health { get; set; }
public long LastSync { get; set; }
}
public class MyVector
{
public float X { get; set; }
public float Y { get; set; }
public float Z { get; set; }
}
这是我的 class
JsonConvert.SerializeObject(myList);//This is how i serilaized to my data. After that I convert this string to byte array and send to the socket.
在客户端 我从套接字获取字节数组并像这样转换字符串
var data=Encoding.UTF8.GetString(result.Buffer);
比这样反序列化
var players= JsonConvert.DeserializeObject<List<PlayerInfo>>(data,new JsonSerializerSettings { NullValueHandling=NullValueHandling.Ignore});
这是文本可视化工具中的数据
感谢您的帮助。
它显然看起来像多级序列化,看起来你正在将对象序列化为 json 字符串,然后再将它传递给 websocket 库,在那里它被序列化为字符串。
在这种情况下,尝试多级反序列化或删除不必要的序列化。
试试这个:
var players= JsonConvert.DeserializeObject<List<PlayerInfo>>(
JsonConvert.DeserializeObject<string>(data),
new JsonSerializerSettings { NullValueHandling=NullValueHandling.Ignore});