在c#中序列化为JSON,在TS中反序列化
本文关键字:反序列化 TS 序列化 JSON | 更新日期: 2023-09-27 18:11:41
我在两个应用程序之间发送数据有问题。我使用以下代码在c#中将数据序列化为JSON:
public static string SerializeToJson<T>(this T obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
byte[] array = ms.ToArray();
return Encoding.UTF8.GetString(array, 0, array.Length);
}
,然后我使用套接字通信发送到我的第二个应用程序,它是在TypeScript中实现的。我用:
反序列化它JSON.parse
函数,它工作得很好,但如果在数据中是特殊字符,例如8211 ' - ',它抛出异常
SyntaxError: Unexpected token in JSON at position 907
可能是序列化和反序列化不同编码的问题,但我不知道JSON.parse中使用的是哪种编码。
有人能帮我吗?
另一种选择是使用Newtonsoft Json。Net(可从nuget获得)。它很容易使用,非常强大。
public static string SerializeToJson<T>(this T obj)
{
return JsonConvert.SerializeObject(obj);
}
你甚至可以添加一些格式或你想要的
我使用转换为base64我的字符串,然后在我的第二个应用程序中解码它来解决这个问题。
下面的代码为我工作。下面的解决方案还确保了底层对象的类型。将 c#对象转换为typescript对象。
使用任何json库将对象转换为json格式。(newtonsoft是最推荐的一个)
string output = JsonConvert.SerializeObject(product); // product =new Product(); <= Product is custom class. substitute your class here
将此字符串传递给应用程序。(ActionResult或ajax调用)
现在在javascript中使用模型(Razor或ajax结果)访问值
YourTSClass.ProcessResults('@Model') // using razor in js
或
.done(response => {ProcessResults(response)}) // using ajax success result
你不需要应用JSON。这样解析。
在typescript中,您可以通过这样声明函数来获得结果。public static ProcessResults(result: Product){...}