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

ServiceStack.Text and DeserializeFromString where Json names are illegal

我已经使用 ServiceStack.Text DeserializeFromString 很长时间了,但是在一个新项目中我遇到了一个问题。

我需要解析为对象的JSON格式如下:

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

因此对象名称以 URL 为前缀,因此我无法将其与 class 成员名称匹配。我试过使用 DataContract 来映射名称,但它只是 returns 个空对象。

是否有另一种方法可以使用 ServiceStack.Text 执行此操作,或者我是否需要手动解析 JSON?

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

编辑:

经过一番尝试,我设法使用 DataContract 属性解决了这个问题。之前它失败了,因为我指定的 classes 前缀不正确。我设法像这样解决它:

[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; }
} 

手动解析它会更容易,您可以这样做:

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