在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中使用的是哪种编码。

有人能帮我吗?

在c#中序列化为JSON,在TS中反序列化

另一种选择是使用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){...}