[英]How do I remove backslashes from Json string
我正在嘗試使用以下代碼構建動態 JSON 請求消息。 嘗試通過反序列化 JSON 字符串來刪除轉義字符時,我收到異常。 具體消息請看下方評論。 如何刪除轉義字符? 有沒有更好的方法來生成請求消息? 數據是正確的,只是需要修正JSON格式。
這是我添加到測試結果消息 class 中的測試結果 JSON 密鑰對值,我將其序列化以獲取發送到 API 的請求消息:
{[
"{\"TestResultSequenceID\":\"1\",\"ActionInfoID\":\"4\",\"Description\":\"Motor 1 amparage draw:\",\"TimeStamp\":\"10/6/2021\",\"AmpDraw\":\"3.4 Amperage\"}",
"{\"TestResultSequenceID\":\"2\",\"ActionInfoID\":\"5\",\"Description\":\"Motor 2 amparage draw:\",\"TimeStamp\":\"10/6/2021\",\"AmpDraw\":\"3.4 Amperage\"}",
"{\"TestResultSequenceID\":\"3\",\"ActionInfoID\":\"6\",\"Description\":\"Fuel pump sock pressed onto assembly:\",\"TimeStamp\":\"10/6/2021\",\"PressedOnFlag\":\" True\"}",
"{\"TestResultSequenceID\":\"4\",\"ActionInfoID\":\"7\",\"Description\":\"Component pump 1 serial barcode label:\",\"TimeStamp\":\"10/6/2021\",\"ComponentPump1SerialNumber\":\"20210930000001\"}",
"{\"TestResultSequenceID\":\"5\",\"ActionInfoID\":\"8\",\"Description\":\"Component pump 2 serial barcode label:\",\"TimeStamp\":\"10/6/2021\",\"ComponentPump2SerialNumber\":\"20210930000002\"}",
"{\"TestResultSequenceID\":\"6\",\"ActionInfoID\":\"9\",\"Description\":\"Fuel pump assembly serial number:\",\"TimeStamp\":\"10/6/2021\",\"AssemblySerialNumber\":\"20210930000003\"}"
]}
下面是將測試結果加載到 JArray 的代碼:
注意:此時正在添加轉義字符。
JArray testresultsjarray = new JArray();
JObject testresultsobj = new JObject();
//Loop through the test action log to build the test results dynamic json object
//var testactionlog = TestActionInfoLogCS.TestActionInfoLogGLRepository;
for (int i = 0; i < TestActionInfoLogCS.TestActionInfoLogGLRepository.Count - 1; i++)
{
dynamic testresultobj = new JObject();
//Code removed that get the attribute info and loads it to the AttributeInfoDT
if ((bool)TestActionInfoLogCS.TestActionInfoLogGLRepository[i].IsTestFlag)
{
//Attribute Driven Test Results Code
//Use the attribute to set the attribute name as the key value when building the test results
objtestresult = GetDynamicObject(new Dictionary<string, object>()
{
{
AttributeInfoDT.Rows[0]["Attribute"].ToString(), //Attribute = AmpDraw
TestActionInfoLogCS.TestActionInfoLogGLRepository[i].ScannedInValue
//ScannedInValue = 3.4 Amperage
}
});
string testresultstring1 = JsonConvert.SerializeObject(objtestresult);
//testresultstring1 = "{\"AmpDraw\":\"3.4 Amperage\"}"
//var testresult1 = JsonConvert.DeserializeObject<string>(testresultstring1);
//JsonConvert.DeserializeObject throughs the following exception:
//Unexpected character encountered while parsing value: {. Path '', line 1, position 1.
testresultobj.TestResultSequenceID = TestActionInfoLogCS.TestActionInfoLogGLRepository[i].TestResultSequenceID.ToString();
testresultobj.ActionInfoID = TestActionInfoLogCS.TestActionInfoLogGLRepository[i].TestActionSequenceNumber.ToString();
testresultobj.Description = TestActionInfoLogCS.TestActionInfoLogGLRepository[i].TestActionDescription;
testresultobj.TimeStamp = Convert.ToDateTime(TestActionInfoLogCS.TestActionInfoLogGLRepository[i].AddedDateTime).ToString("d");
string testresultstring2 = JsonConvert.SerializeObject(testresultobj, Formatting.None);
//testresultstring2 = "{\"TestResultSequenceID\":\"1\",\"ActionInfoID\":\"4\",\"Description\":\"Motor 1 amparage draw:\",\"TimeStamp\":\"10/6/2021\"}"
//var testresult2 = JsonConvert.DeserializeObject<string>(testresultstring2);
//Unexpected character encountered while parsing value: {. Path '', line 1, position 1.
string combindedtestresults = testresultstring2.Substring(0, testresultstring2.Length - 1) + "," + testresultstring1.Substring(1, testresultstring1.Length - 1);
//var combindedtestresults = JsonConvert.DeserializeObject<string>(combindedtestresult);
testresultsjarray.Add(combindedtestresults);
}
}
我調用負載測試結果請求消息存儲庫方法:
TestResultRequestMessageInfoCS.LoadTestResultRequestMessageInfoGLRepository(testresultsjarray))
這是加載方法:
public static bool LoadTestResultRequestMessageInfoGLRepository(object TestResults)
{
TestResultRequestMessageInfoGLRepository.Add(new TestResultRequestMessageInfoCS
{
TransactionID = TestInfoLogCS.TestInfoLogGLRepository[0].TransactionID.ToString(),
SerialNumber = TestActionInfoLogCS.TestActionInfoLogGLRepository[0].ScannedInValue.ToString(),
TestInfoLogID = TestInfoLogCS.TestInfoLogGLRepository[0].TestInfoLogID.ToString(),
TestInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].TestInfoID.ToString(),
BusinessUnitOverhead = TestInfoLogCS.TestInfoLogGLRepository[0].BusinessUnitOverhead.ToString(),
PID = TestInfoLogCS.TestInfoLogGLRepository[0].PID.ToString(),
TestDescription = TestInfoLogCS.TestInfoLogGLRepository[0].TestDescription.ToString(),
ProtocolInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].ProtocolInfoID.ToString(),
DeviceInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].DeviceInfoID.ToString(),
DeviceIPAddress = DeviceInfoCS.DeviceInfoGLRepository[0].DeviceIPAddress.ToString(),
DevicePort = DeviceInfoCS.DeviceInfoGLRepository[0].DevicePort.ToString(),
ProcessTestResultsServiceInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].ProcessTestResultsServiceInfoID.ToString(),
ProcessTestResultsServiceIPAddress = ProcessTestResultsServiceInfoCS.ProcessTestResultsServiceInfoRepository[0].ServiceIPAddress.ToString(),
ProcessTestResultsServicePort = ProcessTestResultsServiceInfoCS.ProcessTestResultsServiceInfoRepository[0].ServicePort.ToString(),
StartTesterServiceInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].StartTesterServiceInfoID.ToString(),
StartTesterServiceIPAddress = StartTesterServiceInfoCS.StartTesterServiceInfoRepository[0].ServiceIPAddress.ToString(),
StartTesterServicePort = StartTesterServiceInfoCS.StartTesterServiceInfoRepository[0].ServicePort.ToString(),
ClientTesterInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].ClientTesterInfoID.ToString(),
ClientTesterIPAddress = ClientTesterInfoCS.ClientTesterInfoGLRepository[0].ClientTesterIPAddress.ToString(),
ClientTesterPort = ClientTesterInfoCS.ClientTesterInfoGLRepository[0].ClientTesterPort.ToString(),
TestRequestListenerMiddlewareInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].TestRequestListenerMiddlewareInfoID.ToString(),
TestRequestListenerMiddlewareIPAddress = TestRequestListenerMiddlewareInfoCS.MiddlewareInfoGLRepository[0].MiddlewareIPAddress.ToString(),
TestRequestListenerMiddlewarePort = TestRequestListenerMiddlewareInfoCS.MiddlewareInfoGLRepository[0].MiddlewarePort.ToString(),
TestResultsListenerMiddlewareInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].TestResultsListenerMiddlewareInfoID.ToString(),
TestResultsListenerMiddlewareIPAddress = TestResultsListenerMiddlewareInfoCS.MiddlewareInfoGLRepository[0].MiddlewareIPAddress.ToString(),
TestResultsListenerMiddlewarePort = TestResultsListenerMiddlewareInfoCS.MiddlewareInfoGLRepository[0].MiddlewarePort.ToString(),
MESInfoID = TestInfoLogCS.TestInfoLogGLRepository[0].MESInfoID.ToString(),
MESIPAddress = MESInfoCS.MESInfoGLRepository[0].MESIPAddress.ToString(),
MESPort = MESInfoCS.MESInfoGLRepository[0].MESPort.ToString(),
TestResults = TestResults,
TestCompleteFlag = TestInfoLogCS.TestInfoLogGLRepository[0].IsTestCompleteFlag.ToString(),
Success = TestInfoLogCS.TestInfoLogGLRepository[0].SuccessFlag.ToString(),
Error = TestInfoLogCS.TestInfoLogGLRepository[0].Errorcode.ToString(),
}) ;
return true;
}
現在我將測試結果消息存儲庫序列化為字符串
TestResultRequestMessageInfoCS.p_TestResultRequestMessage = JsonConvert.SerializeObject(TestResultRequestMessageInfoCS.TestResultRequestMessageInfoGLRepository, Formatting.None);
請在下面找到測試結果請求消息。 它在 TestResult 屬性中具有轉義字符。 我怎樣才能擺脫他們?
{"TransactionID":"06cea8a2-b4d3-40b0-8380-2ed79f9c1179","TestInfoLogID":"17","TestInfoID":"35","BusinessUnitOverhead":"M1422","PID":"PID123456","TestDescription":"Cleantech - 2 Fuel Pump Assembly","DeviceInfoID":"5","DeviceIPAddress":"192.168.50.115","DevicePort":"43700","ProcessTestResultsServiceInfoID":"21","ProcessTestResultsServiceIPAddress":"192.168.50.115","ProcessTestResultsServicePort":"89","StartTesterServiceInfoID":"20","StartTesterServiceIPAddress":"192.168.50.115","StartTesterServicePort":"86","ClientTesterInfoID":"12","ClientTesterIPAddress":"192.168.50.115","ClientTesterPort":"87","TestRequestListenerMiddlewareInfoID":"23","TestRequestListenerMiddlewareIPAddress":"192.168.50.115","TestRequestListenerMiddlewarePort":"85","TestResultsListenerMiddlewareInfoID":"24","TestResultsListenerMiddlewareIPAddress":"192.168.50.115","TestResultsListenerMiddlewarePort":"43600","MESInfoID":"11","MESIPAddress":"192.168.50.115","MESPort":"88","ProtocolInfoID":"2","SerialNumber":"20210923-000001","TestCompleteFlag":"True","TestCompleteDateTime":"10/6/2021 11:05:08 AM","TestResults":["{\"TestResultSequenceID\":\"1\",\"ActionInfoID\":\"4\",\"Description\":\"Motor 1 amparage draw:\",\"TimeStamp\":\"10/6/2021\",\"AmpDraw\":\"3.4 Amperage\"}","{\"TestResultSequenceID\":\"2\",\"ActionInfoID\":\"5\",\"Description\":\"Motor 2 amparage draw:\",\"TimeStamp\":\"10/6/2021\",\"AmpDraw\":\"3.4 Amperage\"}","{\"TestResultSequenceID\":\"3\",\"ActionInfoID\":\"6\",\"Description\":\"Fuel pump sock pressed onto assembly:\",\"TimeStamp\":\"10/6/2021\",\"PressedOnFlag\":\" True\"}","{\"TestResultSequenceID\":\"4\",\"ActionInfoID\":\"7\",\"Description\":\"Component pump 1 serial barcode label:\",\"TimeStamp\":\"10/6/2021\",\"ComponentPump1SerialNumber\":\"20210930000001\"}","{\"TestResultSequenceID\":\"5\",\"ActionInfoID\":\"8\",\"Description\":\"Component pump 2 serial barcode label:\",\"TimeStamp\":\"10/6/2021\",\"ComponentPump2SerialNumber\":\"20210930000002\"}","{\"TestResultSequenceID\":\"6\",\"ActionInfoID\":\"9\",\"Description\":\"Fuel pump assembly serial number:\",\"TimeStamp\":\"10/6/2021\",\"AssemblySerialNumber\":\"20210930000003\"}"],"Success":"True","Error":"","RequestMessageSource":"FuelPumpTester","RequestMessageType":"TestResult"}
我通過反序列化為動態 jobject 解決了這個問題。 將 jobject(測試結果)傳遞到加載存儲庫方法中。 構建測試結果請求消息后,將存儲庫序列化為字符串。 這對我有用。
string testresultsarraystring = "[" + TestResultRequestMessageInfoCS.p_TestResultRequestMessage + "]";
dynamic data = JsonConvert.DeserializeObject<dynamic>(testresultsarraystring);
TestResultRequestMessageInfoCS.LoadTestResultRequestMessageInfoGLRepository(data);
在這種情況下,反斜杠是引號的轉義字符。 Json 格式要求鍵值在引號內。 如果我們想在 c# 中存儲 json 字符串,我們不能這樣做:
string jsonString = "{ "name" : "John" }";
對於將此 json object 存儲為實際字符串的語言,我們需要編寫
string jsonString = "{ \"name\": \"John\" }";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.