C#ServiceStack JsonSerializer反序列化
如何将字符串反序列化为Json对象,其中Json对象可以是单个对象或数组,现在我有了这个,但它是一个hack(伪):C#ServiceStack JsonSerializer反序列化,c#,json,
servicestack,jsonserializer,C#,Json,
servicestack,Jsonserializer,如何将字符串反序列化为Json对象,其中Json对象可以是单个对象或数组,现在我有了这个,但它是一个hack(伪): 类MyObject{ 公共字符串prop1 公共字符串prop2; } 类MyList{ 列出对象{get;set;} } 课堂测试{ MyList=JsonSerialzer.Deserialize(str); //如果列表为空,则可以是单个列表 if(list==null){ MyObject MyObject=JsonSerializer.Deserialize(str);
类MyObject{
公共字符串prop1
公共字符串prop2;
}
类MyList{
列出对象{get;set;}
}
课堂测试{
MyList=JsonSerialzer.Deserialize(str);
//如果列表为空,则可以是单个列表
if(list==null){
MyObject MyObject=JsonSerializer.Deserialize(str);
if(myObject!=null)
列表。添加(myObject);
}
}
如上所示,问题是我从另一个服务接收的json字符串可以是单字符串,也可以是列表字符串。如何优雅地处理这个问题 我强烈建议不要在同一个论点中接受不同的结构,因为这会使您的软件变得非常脆弱和不可预测。但是,如果它可能是一个列表,您只需检查第一个字符是
[
,例如:
if (str.TrimStart().StartsWith("["))
{
MyList list = JsonSerialzer.Deserialize<MyList>(str);
}
else
{
MyObject myObject = JsonSerializer.Deserialize<MyObject>(str);
}
问题更多地存在于JSON消息中,属性应该始终是1个对象或数组。如果它是一个数组,并且结果集只有一个结果,那么它仍然应该封装在一个数组中,这样您就不会遇到您遇到的问题。下面列出的另一个答案可能会帮助您,而不是您发送给我的链接我到底有什么?也许,我没有比较。但下面的答案是你的SO的正确答案。
if (str.TrimStart().StartsWith("["))
{
MyList list = JsonSerialzer.Deserialize<MyList>(str);
}
else
{
MyObject myObject = JsonSerializer.Deserialize<MyObject>(str);
}
class MyObject
{
public string prop1 { get; set; }
public string prop2 { get; set; }
}
class MyList
{
List<MyObject> objects { get; set; }
}
JsConfig.IncludePublicFields = true;