簡體   English   中英

在 C# 中序列化為 JSON 並在 TS 中反序列化

[英]Serialize to JSON in C# and deserialize in TS

我在兩個應用程序之間發送數據時遇到問題。 我使用以下代碼在 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.Parse。

在打字稿中,您可以通過像這樣聲明函數來獲得結果。

public static ProcessResults(result: Product){...}

暫無
暫無

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

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