0

我的 JSON 格式如下:

{ “消息”:
   [
     {“FB”:{“消息”:“尝试”,“用户”:“789”}},
     {“饲料”:{“抽象”:“酷”,“标题”:“嘿”}},
     {“tw”:{“tweetid”:“984327”,“用户”:“gart”}},
     {“fb”:{“消息”:“fgt”,“用户”:“690”}},
     {“tw”:{“tweetid”:“346”,“用户”:“nfgdr”}},
     {“饲料”:{“抽象”:“gredf”,“标题”:“wret”}}
   ]
}

我已经替换了双引号,以便可以将其存储在字符串中。

现在,当我尝试使用以下方法反序列化时:

JavaScriptSerializer jss = new JavaScriptSerializer();

jss.Deserialize<XYZType>(data);

它给出以下错误:

传入的对象无效,应为成员名称。(1): {"news":[{"fb":{"message":"try","user":"789"}},{"feed":{"title":"hey","abstract ":"cool"}},{"tw":{"tweetid":"984327","user":"gart"}},{"fb":{"message":"fgt","user": "690"}},{"tw":{"tweetid":"346","user":"nfgdr"}},{"feed":{"title":"wret","abstract":"gredf "}}]}

任何帮助都感激不尽。

4

3 回答 3

3

我会看看Json.Net并停止“手动”尝试修复内容并让系统/库为您完成。此外,JavaScriptSerializer 有点不稳定......

于 2012-06-21T08:52:18.983 回答
2

继续:除非“新闻”数组被序列化为对象数组,否则数组中的对象不是同质的这一事实肯定会让您在尝试将 JSON 序列化为 C# 对象时遇到一些麻烦。

如果您可以控制 JSON(源),则需要更好地对其进行结构化,以使其易于序列化为 C# 对象。如果您可以让 JSON 采用以下结构:

{ "news": 
    [ 
        { 
            "fb": { "message": "try", "user": "789" },
            "feed": { "abstract_": "cool", "title": "hey" },
            "tw": { "tweetid": "984327", "user": "gart"  } 
        },
        { 
            "fb": { "message": "fgt", "user": "690" },
            "tw": { "tweetid": "346", "user": "nfgdr" },
            "feed": { "abstract_": "gredf", "title": "wret" }
        }
    ] 
}

这种结构很容易被以下结构的类型 XYZType 反序列化:

class XYZType
{
    NewsType[] news { get; set; }

    public class NewsType
    {
        FBType fb { get; set; }
        FeedType feed { get; set; }
        TweetType tw { get; set; }

        public class FBType
        {
            string message { get; set; }
            string user { get; set; }
        }

        public class FeedType
        {
            string title { get; set; }
            string abstract_ { get; set; }
        }

        public class TweetType
        {
            string tweetid { get; set; }
            string user { get; set; }
        }   
    }
}

注意

1) 你不能在 C# 中有一个名为“abstract”的标识符,所以我故意将“abstract”更改为“abstract_”

2) 嵌入“容器”类是可选的。你可以让它们“不嵌入”

于 2012-06-21T09:15:13.690 回答
0

您不能只删除引号将其存储在字符串中。那么它不是有效的Json!您需要分隔引号,以便

"{\"news\":[{\"fb\":{\"message\":\"try\",\"user\":\"789\"}},etc."
于 2012-06-21T08:51:31.403 回答