ServiceStack.Text和DeserializeFromString,其中Json名称是非法的

本文关键字:非法 Json 其中 Text DeserializeFromString ServiceStack | 更新日期: 2023-09-27 18:00:43

我一直在使用ServiceStack。很长一段时间以来,文本反序列化FromString,但在一个新项目中,我遇到了一个问题。

我需要解析为对象的JSON具有以下格式:

{"http://SomeUrl.com/":{"http://otherUrl.org/schema#name":[{"value":"val1","type":"val2"}]}}

所以对象名称的前缀是URL,所以我无法将其与类成员名称匹配。我尝试过使用DataContract来映射名称,但它只返回null对象。

是否有其他使用ServiceStack的方法。文本,还是需要手动解析JSON?

如有任何帮助,我们将不胜感激。

编辑:

经过一番讨论,我设法使用DataContract属性解决了这个问题。它以前失败了,因为我指定的类没有正确加前缀。我设法解决了这个问题:

[DataContract]
public class Schools
{
    [DataMember(Name = "http://demo.talisaspire.com/")]
    public Items Items { get; set; }
}
[DataContract]
public class Items
{
    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#code")]
    public IEnumerable<Element> Code { get; set; }
    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#knowledgeGrouping")]
    public IEnumerable<Element> KnowledgeGrouping { get; set; }
    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#name")]
    public IEnumerable<Element> Name { get; set; }
    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#organizationalUnit")]
    public IEnumerable<Element> OrganizationalUnit { get; set; }
    [DataMember(Name = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type")]
    public IEnumerable<Element> Type { get; set; }
}
public class Element
{
    public string Type { get; set; }
    public string Value { get; set; }
} 

ServiceStack.Text和DeserializeFromString,其中Json名称是非法的

手动解析它会更容易,您可以使用

var obj = JsonObject.Parse(json)
    .Object("http://SomeUrl.com/");
var items = obj.ArrayObjects("http://otherUrl.org/schema#name")[0];
var value = items["value"]; //= val1
var type = items["type"];   //= val2