gpt4 book ai didi

C# ServiceStack JsonSerializer 反序列化

转载 作者:行者123 更新时间:2023-11-30 21:48:08 25 4
gpt4 key购买 nike

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

class MyObject{
public string prop1
public string prop2;
}

class MyList{
List<MyObject> objects {get; set; }
}

class Test{
MyList list = JsonSerialzer.Deserialize<MyList>(str);
//if list is null - it can be single
if(list == null){
MyObject myObject = JsonSerializer.Deserialize<MyObject>(str);
if(myObject != null)
list.add(myObject);
}
}

如上所示,问题是我从另一个服务接收到的 json 字符串可以是单个的也可以是列表的。如何优雅地处理这个问题?

最佳答案

我强烈建议不要在同一个参数中接受不同的结构,这会使您的软件非常脆弱且不可预测。但是如果它可以是一个列表,你可以只检查第一个字符是 [,例如:

if (str.TrimStart().StartsWith("["))
{
MyList list = JsonSerialzer.Deserialize<MyList>(str);
}
else
{
MyObject myObject = JsonSerializer.Deserialize<MyObject>(str);
}

另请注意,默认情况下,所有 ServiceStack 文本序列化程序仅序列化公共(public)属性,因此您需要为每个要序列化的属性添加 getter/setter,例如:

class MyObject
{
public string prop1 { get; set; }
public string prop2 { get; set; }
}

class MyList
{
List<MyObject> objects { get; set; }
}

否则,您可以配置 ServiceStack.Text 来序列化公共(public)字段:

JsConfig.IncludePublicFields = true;

关于C# ServiceStack JsonSerializer 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com