[英]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.