Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ServiceStack JsonSerializer反序列化_C#_Json_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Jsonserializer - Fatal编程技术网 servicestack,jsonserializer,C#,Json,servicestack,Jsonserializer" /> servicestack,jsonserializer,C#,Json,servicestack,Jsonserializer" />

C#ServiceStack JsonSerializer反序列化

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);

如何将字符串反序列化为Json对象,其中Json对象可以是单个对象或数组,现在我有了这个,但它是一个hack(伪):

类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;