如下一串字符串,根据 logID、sign、IP、时间、方法、类型、消息作为key,转成 Dictionary<string, object>
{
"logID":"7",
"sign":"9914df154c1b0f2843849c6b07eead8c",
"IP":"127.0.0.1",
"时间":"2018/1/12 11:06:43",
"方法":"SapDataService.CommonService.GetBusinessData",
"类型":"响应",
"消息":"{"d":{"results":[{"__metadata": {"type":"jkh","uri":"666)"},"DocEntry":2859,"DocNum":1819,"CardCode":"V010394","CardName":"XXXX有限公司","NumAtCard":"46","Comments":"666","PurchaseDelivery1":{"__deferred":{"uri":"fdgdf"}}}]}}"
}
string centos = "{\"logID\":\"7\",\"sign\":\"9914df154c1b0f2843849c6b07eead8c\",\"IP\":\"127.0.0.1\",\"时间\":\"2018/1/12 11:06:43\",\"方法\":\"SapDataService.CommonService.GetBusinessData\",\"类型\":\"响应\",\"消息\":\"{\"d\":{\"results\":[{\"__metadata\": {\"type\":\"jkh\",\"uri\":\"666)\"},\"DocEntry\":2859,\"DocNum\":1819,\"CardCode\":\"V010394\",\"CardName\":\"XXXX有限公司\",\"NumAtCard\":\"46\",\"Comments\":\"666\",\"PurchaseDelivery1\":{\"__deferred\":{\"uri\":\"fdgdf\"}}}]}}\"}";
使用下面这个方法报错
Dictionary<string, object> dicR = StringToDictionary<string, object>(centos);
public static Dictionary<TKey, TValue> StringToDictionary<TKey, TValue>(string jsonStr)
{
if (string.IsNullOrEmpty(jsonStr))
return new Dictionary<TKey, TValue>();
Dictionary<TKey, TValue> jsonDict = JsonConvert.DeserializeObject<Dictionary<TKey, TValue>>(jsonStr);
return jsonDict;
}
y要把所有字段连接起来当KEY.然后原对象做value?
我最后要的数据是 Dictionary<string, object>
logID=7
sign=9914df154c1b0f2843849c6b07eead8c
ip=127.0.0.1
时间=2018/1/12 11:06:43
方法=SapDataService.CommonService.GetBusinessData
类型=响应
消息={"d":{"results":[{"__metadata": {"type":"jkh","uri":"666)"},"DocEntry":2859,"DocNum":1819,"CardCode":"V010394","CardName":"XXXX有限公司","NumAtCard":"46","Comments":"666","PurchaseDelivery1":{"__deferred":{"uri":"fdgdf"}}}]}}
如果【消息】内不是json数据格式的话,是转换成功的,目前问题就是这样子
@母鸡轰: 反序列化成动态类呢?
@吴瑞祥: 试过了还是不行
@母鸡轰:问题在你的json是错误的.
---------------------------
Microsoft Visual Studio
---------------------------
将 JSON 粘贴为类
剪贴板中的内容不是有效的 JSON 实例。请修复该问题,然后重试:
After parsing a value an unexpected character was encountered: d. Path '消息', line 15, position 8.
---------------------------
确定
---------------------------
@吴瑞祥:
我最后要的数据是 Dictionary<string, object>
logID=7
sign=9914df154c1b0f2843849c6b07eead8c
ip=127.0.0.1
时间=2018/1/12 11:06:43
方法=SapDataService.CommonService.GetBusinessData
类型=响应
消息={"d":{"results":[{"__metadata": {"type":"jkh","uri":"666)"},"DocEntry":2859,"DocNum":1819,"CardCode":"V010394","CardName":"XXXX有限公司","NumAtCard":"46","Comments":"666","PurchaseDelivery1":{"__deferred":{"uri":"fdgdf"}}}]}}
@吴瑞祥: 不管value内是不是json
@母鸡轰: ,\"消息\":\"{\"d\":{ 这个地方的\":\"{\"引号是有问题的
@母鸡轰: 这个地方会把字符串中断掉.后面的双引号就已经是字符串结束了.所以是错误的.
这个字符串应该是被拼接出来的.生成这个json字符串的时候.用json序列化一下.
@吴瑞祥: 好的,感谢了
是否用 Microsoft JScript 里面的,抱什么错,看exception看堆栈三。
未处理Newtonsoft.Json.JsonReaderException
HResult=-2146233088
Message=After parsing a value an unexpected character was encountered: d. Path '消息', line 1, position 169.
Source=Newtonsoft.Json
LineNumber=1
LinePosition=169
Path=消息
StackTrace:
在 Newtonsoft.Json.JsonTextReader.ParsePostValue()
在 Newtonsoft.Json.JsonTextReader.ReadInternal()
在 Newtonsoft.Json.JsonTextReader.Read()
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateDictionary(IDictionary dictionary, JsonReader reader, JsonDictionaryContract contract, JsonProperty containerProperty, String id)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
在 Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
在 Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
在 Soholife.Common.Json.ConvertToJson.StringToDictionary[TKey,TValue](String jsonStr)
在 ConsoleApplication3.Program.Test1() 位置 f:\MyProject\Logger\ConsoleApplication3\Program.cs:行号 36
在 ConsoleApplication3.Program.Main(String[] args) 位置 f:\MyProject\Logger\ConsoleApplication3\Program.cs:行号 20
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
具体代码在 问题补充 那里
@母鸡轰: 这个用Microsoft JScript 里面的来解析成Dictionary。
@花飘水流兮: 请问有具体的代码没
@母鸡轰: https://www.cnblogs.com/caofangsheng/p/5687994.html
@母鸡轰: 一个类就是一个Dictionary,Object 你自己调试时可以看到类型,如果是个类继续Dictionary,如果是集合你直接转换为集合类型即可。
这个json对应的类型并不是Dictionary<string, object>
装成 Dictionary<string, stirng>,或者Dictionary<string, object> 都可以
上面我的问答有误。由于json序列化时不包含类型信息,所以不能在反序列化时使用object(string除外)